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

来源:互联网 发布:网络阅卷y100edu 编辑:程序博客网 时间:2024/05/19 11:47
该知识点是自己从书籍中学习的笔记

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

  对于hashCode有这样的规约:

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

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

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

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

原创粉丝点击