(PPT来源:小码哥数据结构网课)
默认的 == 表示是否指向同一个对象
默认的 hashcode 与自身的内存地址相关
默认的 equals 表示内存地址
使用 “^” 异或 操作符:在计算时充分利用了所有信息,避免冲突
默认的 hashcode 与对象自身的内存地址相关,所以实际情况中需要自己实现
比较两个对象是否相等时,要同时实现 hashcode 方法和 equals 方法
比较类型相等,可以用 getClass 或 instanceOf:
即:hashcode 在计算索引时使用;equals 在发生冲突时使用
自定义对象总结:
自己实现的 hashcode,哈希值相等则索引绝对相等
1) 不实现 hashcode不实现equals,没有相等的判定条件,就普遍会导致存储所有元素(索引不一样则会存储在不同地方,索引一样也会因为不相同存储两次)
2) 只实现equals不实现 hashcode,则哈希值不一样,但通过哈希值计算出的索引两种可能:一样 or 不一样
3) 只实现hashcode不实现 equals,hashcode 是根据类型内的属性是否一样来实现的,所以只要属性完全一致,哈希值就一致;但 equals 没有自己实现,所以两个对象一定不是同一个
4) 想让哪些属性作为判定对象是否相等的条件,就只将这些属性放在 hashcode 和 equals 实现