java中重写equals和重写hashCode()
记得在刚上初一的时候,第一堂数学课学的是集合,那时候我知道了集合是不允许重复元素存在的。
hashCode 方法用于散列集合的查找,equals 方法用于判断两个对象是否相等。
为什么重写了 equals 方法,还要重写 hashCode 方法?
因为如果只重写了 equals 方法,两个对象 equals 返回了true,但是如果没有重写 hashCode 方法,集合还是会插入元素。这样集合中就出现了重复元素了。
接下来详细分析,以 HashMap 的 put 方法:
public V put(K key, V value) { if (key == null) return putForNullKey(value); //通过key的hashcode计算hash值 int hash = hash(key.hashCode()); //通过hash值和table数组的长度计算出元素存放在table数组的位置 int i = indexFor(hash, table.length); //table[i]的位置已经存在元素,遍历链表 for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; //调用 equals 方法判断key是否相等,若相等,该key对应的键值对已经存在,用新的value取代旧的value if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; // 若该key对应的键值对不存在,将key-value封装成Entry对象添加到table[i]处 ,头插法。 addEntry(hash, key, value, i); return null; }
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1142
183.71 KB下载数642
644.84 KB下载数2755
相关文章
发现更多好内容猜你喜欢
AI推送时光机java中重写equals和重写hashCode()
后端开发2023-05-31
equals、hashCode、toString方法重写
后端开发2020-06-25
如何重写hashcode和equals方法
后端开发2024-04-02
Java中为什么重写equals()也需要重写hashCode方法
后端开发2023-05-17
浅谈java中为什么重写equals后需要重写hashCode
后端开发2024-04-02
Java中 equals 重写时为什么一定也要重写 hashCode
后端开发2024-04-02
浅谈为什么重写equals()就要重写hashCode()
后端开发2024-04-02
怎么重写及应用equals()方法和hashCode()方法
后端开发2023-07-05
怎么Java中重写equals方法
后端开发2023-05-30
HashSet中怎么重写haseCode和equals
后端开发2023-06-02
String中equals怎么重写
后端开发2023-06-27
Java中怎么重写及应用hashCode
后端开发2023-06-27
一文告诉你为什么要重写hashCode()方法和equals()方法
后端开发2024-04-02
Java中如何正确重写equals方法
后端开发2024-04-02
关于重写equals()方法和hashCode()方法及其简单的应用
后端开发2023-05-14
为什么修改equals方法时还要重写hashcode方法
后端开发2023-06-15
为什么要重写hashcode
后端开发2023-10-29
怎么重写Equals方法
后端开发2024-04-02
如何在Java中使用equals()方法实现重写
后端开发2023-05-31
咦!没有更多了?去看看其它编程学习网 内容吧