等价性的定义
- 自反
- 对称
- 传递
定义等价性
- AF:AF映射相同结果,一样
- 观察法:外部观察者对两个对象调用任何操作,结果一样,则相同。
==以及equals
- 基本类型判等要用==
- 对象判等,使用==相当于使用object的equals,比较二者遥控器似乎是否相等,即是否指向同一片内存区域。
- 设计ADT时,一定要重写equals,根据你的RI,根据rep之间的取值判断是否相等。
HashCode
- 当我们重写equals时,一定要写一波HashCode方法,否则HashCode默认是object里的方法,而那里返回的是内存地址。
- 懒人可以重写HashCode为返回常值,这样一定可以保证相同的对象的Hash值一样,进而在HashMap中不会出现错误。
- 但是,这会导致所有对象放在HashCode的同一个键值凹槽内,进而变成一个List,效率变低。
- 我们最好结合rep,计算一个好的Hash。
Mutable类型的equals
- 行为等价性:调用任何方法,展现行为一致。
- 观察等价性:不改变状态下,看二者是否一致。比如List,看对应位置元素是否一样。
- AutoBox会破坏等价性。
- 因此,最好的方式就是Leave it as it be,让object的equals方法为他们判断。