为什么重写equals一定要重写hashcode呢
我的理解就是为了避免hashset等结构插入重复元素,等等情况,所以有三大规约,因为三大规约,所以我们重写equals时候要重写hashCode。
三大约定:
- 在一个应用程序运行期间,假设一个对象的equals方法做比較所用到的信息没有被改动的话。则对该对象调用hashCode方法多次,它必须始终如一地返回同一个整数。
- 假设两个对象依据equals(Object o)方法是相等的,则调用这两个对象中任一对象的hashCode方法必须产生同样的整数结果。
- 假设两个对象依据equals(Object o)方法是不相等的。则调用这两个对象中任一个对象的hashCode方法。不要求产生不同的整数结果。但假设能不同,则可能提高散列表的性能。
有一个概念要牢记。两个相等对象的equals方法一定为true, 但两个hashcode相等的对象不一定是相等的对象。
写的好的文章:
https://www.jianshu.com/p/a9e82ba2c454