第10题(2023/9/15)
HashCode和equals
答:
(1)如果两个对象相等,那么这两个对象得hashcCode值也一定相等
(2)如果两个对象相等,那么这两个对象调用equals方法时,一定会返回true
(3)如果两个对象的hashCode值相等,这两个对象不一定相等
(4)equals 方法被覆盖过,hashCode方法也必须被覆盖
(5)hashCode的默认行为是对堆上的对象产生默认值(也就是哈希表中索引值),如果没有重写hashCode,那么class上的两个对象无论如何都不会相等的。
hashCode介绍
hashCode()的作用是获取对象的哈希码,(也称为散列码)它实际上返回的是一个int整数。这个哈希码的作用是确当该对象在哈希表中的位置。java中任何类都有hashCode方法,散列表存储的是键值对,能够根据“键”快速的找到值,这就用到了散列码。
为什么要有hashCode?
这里以HashSet为例,我们都知道Set集合中是不允许存储重复元素的,我们在看一下实现,首先对象加入HashSet时,要检查其散列码,在散列表中看其是否有值,若没有值,则直接加入,若有值(散列表中可能存在冲突),则使用equals方法进行比较,若相等,不允许进入,若不相等,解决冲突,加入集合。这样就大大减少了equals次数,提高了执行速度。