标签:
java.lnag.Object中对hashCode的约定:
1. 在一个应用程序执行期间,如果一个对象的equals方法做比较所用到的信息没有被修改的话(也就是说这个对象的成员没有被改变),则对该对象调用hashCode方法多次,它必须始终如一地返回同一个整数。
个人理解:对象A, 在使用对象A之前,它的hashcode是20,如果在程序运行期间使用了对象A,但是没有修改对象A的成员,则它的hashcode仍然是20.
2. 如果两个对象根据equals(Object o)方法是相等的(即这2个对象是内存地址是一样的),则调用这两个对象中任一对象的hashCode方法必须产生相同的整数结果。
个人理解:2个内存地址相同的对象,在某种意义上说就是一个,所以它的hashcode是一样的。
3. 如果两个对象根据equals(Object o)方法是不相等的,则调用这两个对象中任一个对象的hashCode方法,不要求产生不同的整数结果。但如果能不同,则可能提高散列表的性能。
有一个概念要牢记,两个相等对象的equals方法一定为true, 但两个hashcode相等的对象不一定是相等的对象。
所以hashcode相等只能保证两个对象在一个HASH表里的同一条HASH链上,继而通过equals方法才能确定是不是同一对象,如果结果为true, 则认为是同一对象不在插入,否则认为是不同对象继续插入。
即。如果hashcode相同,而且equals相同,则认为是同一对象。
标签:
原文地址:http://www.cnblogs.com/chenyu123/p/4308925.html