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.自動裝箱和等價性

相關文章
相關標籤/搜索