HIT软件构造课程3.5总结(Equality in ADT and OOP)

1.等价性关系

  等价关系
数组

    自反、对称、传递函数

2.评价等价性的三种方法

  ADT的等价操做性能

    抽象函数AF:内部表示->抽象表示code

    基于抽象函数AF定义ADT的等价操做。对象

  使用AF定义等价性get

    若是AF映射到相同的结果,则等价。hash

  使用操做定义等价性class

    站在外部观察者角度,对两个对象调用任何相同的操做,都会获得相同的结果则说明等价。效率

3.==和equals()

  == :引用等价性,equals():对象等价性数据类型

  自定义ADT时,须要根据对等价的要求,决定是否重写equals()

  ==操做和equals()方法

    对对象数据类型,采用equals(),对基本数据类型,采用==(判断ID是否相等,指向同一段空间)

    应该老是使用equals()判断相等,

4.实现equals()

  不变类型的等价性

    默认实现是使用了引用等价性

    须要重写

  instanceof

    判断某个对象是否是特定类型(或其子类型)

    动态类型检查。除了用于实现equals方法,尽量避免使用instanceof和getclass

  用多态性代替instanceof

5.对象契约

  对象里的equals()契约

    除非对象被修改了,不然调用屡次equals的结果应一致。相等的对象,其hashCode的结果必须一致。

  打破了等价关系

    自反性,传递性(绝对值的例子),对称性

  哈希表

    哈希表实现了键值之间的映射。键值对中的key被映射为hashcode,对应到数组的index,hashcode决定了数据被存储到数组的哪一个位置。

   哈希表契约

    程序中屡次调用同一对象的hashCode方法,都要返回相同值。等价的对象必须有相同的hashCode。不相等的对象hashCode相同性能会变差。

  重写hashCode()

    最简单方法:让全部对象的hashcode为一常量:下降了效率。

    经过equals计算用到的全部信息的hashcode组合出新的hashcode

6.可变类型的等价性 

  观察等价性(倾向):不改变状态的状况下,两个可变对象看起来一致。

  行为等价性:调用对象的任何方法都展现出一致的结果。

  可变类型和不可变类型equals和hashcode的方法总结

  后者必须重写,前者不该该

7.自动装箱和等价性

相关文章
相关标签/搜索