Bootstrap

hashCode和equals

1.hashCode和equals的区别

1.1 hashCode()和equals()都是Object类中的方法
如果不重写次方法

  1. hashCode():属于本地方法,返回的是对象的地址值
  2. equals():判断两个对象的地址值是否相等

如果重写此方法

  1. hashCode():返回的是根据对象的成员变量计算出额一个整数
  2. equals():比较的是两个对象的内容是否相等

1.2 hashCode()和equals()方法的区别

  1. 两个对象如果·通过equal()方法比较的内容相同,那么hashCode()必定相等
  2. 如果两个对象通过hashCode()方法比较后相等,则equal()方法比较内容不一定相等

1.3 有equals()方法还需要hashCode()方法干什么?

  1. 问题:对于一个对象中有大量的成员信息,用equals()比较对象是否相等是会降低效率的
  2. 解决:可以先通过hashCode()方法比较,如果不相等那么就没有必要进行equals()方法判断了,如果相等,那么再进行下一步判断equals()方法判断,equals()判断相等了,那么两个对象的内容才是真正相同,通过这种方式来提高判断对象是否相等的效率

2.在HashSet集合中,通过hashCode()和equals()方法,保证元素的唯一性

HashSet在add方法中,进行了数据的判断,首先比较的是对象的哈希值是否相同,这个哈希值是通过对象的hashCode()计算出来的,如果hashCode()不相同,那么就直接添加到集合中
如果哈希值相同,需要进一步判断内容是否相同,进行equals判断,如果内容不同才真正的添加的集合,如果equal为false则不会添加到集合

;