hashCode()与equals()的区别
相同点
同属于 Object 类
重写与不重写的区别
- 不重写:
hashCode():属于Native本地方法,返回的是对象的堆中地址值
equals():比较两个对象地址值是否相等 - 重写:
hashCode():返回值是经过散列值算法
将对象计算得出一个整数
equals():比较两个对象的信息内容是否相等
重写 hashCode() 结果比较和 equals() 比较的结果是否相等
- 重写后的equals仅对信息内容进行比较相等,那么hashCode计算的结果比较一定相等,equals绝对可靠
- 重写后的hashCode经过算法得出散列值进行比较相等,那么equals比较有可能不一定相等,不相同内容的值经过散列算法的值可能一致,所以hashCode()不是绝对可靠的
保证唯一性的同时,如何保证高的效率
equals() 属于细粒度比较,将对象内容逐一比较,当对象成员内容多时,可先进行hashCode() 将对象计算出散列值
继续粗粒度比较,如果散列值
相等,再继续 equals() 细粒度内容逐一对比,可以提高效率.
HashSet集合存储元素如何保证唯一性
需要集合存储的对象
类必须重写 hashCode() 和 equals 方法
- 唯一效验的细节划分
先比较地址值➡比较HashCode➡equals比较