hashCode是比较Hash值而equles默认是比较地址。hashCode相同equles不一定相同,但是为什么两者要一块存在呢?经过笔者通过查找资料最后得出一些结论:
1、hash的存在是为了更快的对比两个数的值,如果hash不同那么就没必要对比后面的值了,因为hash是事先生成好了,所以速度是比较快的。
2、在没有重写hash和equals的情况下,hash不相同,两个对象就一定不同,hash相同两个对象不一定相同,equals相同hash一定相同。
HashMap在存储元素的时候首先会计算哈希值,一个哈希值在一个数组中占一个位置,如果哈希值相同,会再去调用equals,如果结果为True,那么说明是两个相同的元素,不能存入(set去重)。如果为false,说明虽然哈希值相同,但两个元素不一样,比如:“张三”和“李四”,二者哈希值相同,但是内容不同
3、如果遇到了所谓的‘哈希碰撞’那么就需要使用equals进行比较了。
4、基于以上两点,我们知道如果要是重写了equals,那么就必须要重写hash。