1.hashCode和equals的区别
1.1 hashCode()和equals()都是Object类中的方法
如果不重写次方法
- hashCode():属于本地方法,返回的是对象的地址值
- equals():判断两个对象的地址值是否相等
如果重写此方法
- hashCode():返回的是根据对象的成员变量计算出额一个整数
- equals():比较的是两个对象的内容是否相等
1.2 hashCode()和equals()方法的区别
- 两个对象如果·通过equal()方法比较的内容相同,那么hashCode()必定相等
- 如果两个对象通过hashCode()方法比较后相等,则equal()方法比较内容不一定相等
1.3 有equals()方法还需要hashCode()方法干什么?
- 问题:对于一个对象中有大量的成员信息,用equals()比较对象是否相等是会降低效率的
- 解决:可以先通过hashCode()方法比较,如果不相等那么就没有必要进行equals()方法判断了,如果相等,那么再进行下一步判断equals()方法判断,equals()判断相等了,那么两个对象的内容才是真正相同,通过这种方式来提高判断对象是否相等的效率
2.在HashSet集合中,通过hashCode()和equals()方法,保证元素的唯一性
HashSet在add方法中,进行了数据的判断,首先比较的是对象的哈希值是否相同,这个哈希值是通过对象的hashCode()计算出来的,如果hashCode()不相同,那么就直接添加到集合中
如果哈希值相同,需要进一步判断内容是否相同,进行equals判断,如果内容不同才真正的添加的集合,如果equal为false则不会添加到集合