image

编辑人: 舍溪插画

calendar2025-05-10

message2

visits835

判断两个对象是否相等,为什么必须同时重写equals()和hashcode()方法

分析&回答

两个对象 equals的时候,hashCode必须相等,但hashCode相等,对象不一定equals。

  • hashCode(散列值),并不能表现其唯一性,但是有离散性,其意义在于类似于进行hashMap等操作时,加快对象比较的速度,进而加快对象搜索的速度。
  • 如果没有重写 hashcode方法,使用Object自带的hashCode,无法保证两个对象equals的时候 hashCode 必须相等的条件。
  • 如果你的对象想放进散列存储的集合中(比如:HashSet,LinkedHashSet)或者想作为散列Map(例如:HashMap,LinkedHashMap等等)的Key时,在重写equals()方法的同时,必须重写hashCode()方法。

总结

  1. hashCode()方法存在的主要目的就是提高效率
  2. 如果你想把对象放到散列存储结构的集合中时,是必须要重写的

创作类型:
原创

本文链接:判断两个对象是否相等,为什么必须同时重写equals()和hashcode()方法

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share