hashcode()和equals()都是object类中的方法。
equals()方法
equals()的作用分两种情况:
1. 没有被覆写时,等同于==,比较的是两个对象的地址是否相同。
2. 可以被覆写,如String中覆写了equals()方法,用于比较两个字符串的大小。
hashcode()方法
hashcode()的作用------计算哈希值,仅在本质为散列表的类中起作用。如:HashMap,HashTable,HashSet。
因为散列表中的元素不可重复,当添加新元素时需要判断它是否出现过。
如果没有hashcode(),需要从头到尾一个个比较是否相同,这样当散列表比较长时,元素比较的代价很大。
所以,可以利用hashcode(),因为散列表存储的是键值对,利用hashcode()计算对象的哈希值,即在散列表中的键值,可以一下找到元素要存储的物理位置:
- 如果这个位置没有元素,就可以直接添加;
- 如果有元素,再利用equals()比较元素是否相等,这样可以大大减少比较次数。
3. 为什么覆写equals()方法的时候需要覆写hashcode()方法?
因为覆写equals()方法后,我们还需要保证hashcode()方法的一些常规约定,才可以保证可以正常使用基于散列表的集合。
- equals()比较两个对象相等时,它的哈希值也要相等;
- equals()比较两个元素不等时,哈希值可能相等也可能不等