学习effective java-9对所有对象共同的方法之覆写equals方法时请同时覆写hashCode

该知识点是自己从书籍中学习的笔记

   在很多情况下,如果覆写了equals方法,但是未覆写hashCode话,会导致错误发生。而这种错误发生debug是很困难的。如果未覆写hashCode的话,那么HashMap,HashSet,HashTable集合类将会有很大的问题。

  对于hashCode有这样的规约:

  1. 如果一个对象的equals作比较并且该对一直未被修改的话,那么该对象返回的hashCode一定是一样的在运行期间。当然hashCode在不同的机器、不同的运行期间是可以不同的。

2.  如果两个对象通过equals方法对比是相等的话,那么其hashCode也必然相等;如果两个对象通过equals不相等的话,那么其hashCode也必然不等。

 当覆写hashCode方法的时候,不要指望通过排除计算hashCode的一步的域方式来提高性能。否则的话,会导致hashCode范围很小,分布的链会很长,在查找的时候会很慢。

总之,如果两个对象通过equals方法比较相等的话,请记住一定要覆写hashCode方法。

发布了42 篇原创文章 · 获赞 0 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章