为什重写equals方法需要重写hashCode

首先重写equal方法必须重写hashCode方法是通用的约定;如果不这么做,那么就无法使用hash算法的容器(hashMap、hashSet等)

Object规范的具体约定

  1. 如果没有修改 equals 方法中用以比较的信息,在应用程序的一次执行过程中对一个对象重复调用 hashCode 方法时,它必须始终返回相同的值。在应用程序的多次执行过程中,每个执行过程在该 对象上获取的结果值可以不相同。
  2. 如果两个对象根据 equals(Object) 方法比较是相等的,那么在两个对象上调用 hashCode 就必须产生的结果是相同的整数。
  3. 如果两个对象根据 equals(Object) 方法比较并不相等,则不要求在每个对象上调用 hashCode 都必须产生不同的结果。 但是,程序员应该意识到,为不相等的对象生成不同的结果可能会提高散列 表(hash tables)的性能

hashCode的理解

  • hashCode其实是一种对象上的标识,如果两个对象相等,那么他们的对象标识一定是相等的;

比如 团队2中小李说小张很优秀,小王也说小张很优秀;那么小张就是张三这个人的标识,这时候的两个同事口中的小张是同一个人,那么相同的人标识是相同的;那么团队2中的小张也很优秀,这时候小张分别是两个团队的中张三和张四了;这时候不同的人标识是相同的

  • hashCode是一种压缩算法(固定长度大小的int值标识对象)

    因为对象很多,也是未知的;那么就是有限的长度标识无限的内容了,肯定是标识不了所有对象,所以就导致了重复的存在(标识重复,也就是hashCode重复)

你可能感兴趣的:(为什重写equals方法需要重写hashCode)