码迷,mamicode.com
首页 > 其他好文 > 详细

equals和hashcode的联系

时间:2018-05-12 22:32:55      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:OLE   map   冲突   必须   索引   java   建立   nat   就是   

obj中的equals方法,默认比较的是内存地址;
public boolean equals(Object obj) {
return (this == obj);
}
hashcode 方法是native的,在c++中实现的;

如果重写,java对象的equals和hashcode是这样规定的:
1.相等的对象必须具有相同的hashcode值;
  如果两个java对象A和B,A和B的euqals结果为true,hashmap的put方法是pus时流程如下:
    hash(key)得到key的hashcode(),hashmap根据获得的hashcode找到要插入的位置所在的链,
    在这个链里面放的都是hashcode相同的Entry键值对,在找到这个链之后,会通过equals()方法判断是否已经存在要插入的键值对。
  如果第一步hashcode值已经不同了,那么就会重复插入两个key,违反了hashmap的原则。
2.hashcode相同,对象不一定相同;
  假如两个Java对象A和B,A和B不相等(eqauls结果为false),但A和B的哈希码相等,将A和B都存入HashMap时会发生哈希冲突,
  也就是A和B存放在HashMap内部数组的位置索引相同这时HashMap会在该位置建立一个链接表,将A和B串起来放在该位置,显然,
  该情况不违反HashMap的使用原则,是允许的。当然,哈希冲突越少越好,尽量采用好的哈希算法以避免哈希冲突。





equals和hashcode的联系

标签:OLE   map   冲突   必须   索引   java   建立   nat   就是   

原文地址:https://www.cnblogs.com/liwei2018/p/9029958.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!