可變類
equals() 比較引用,同==運算子。即比較行為等價性而非觀察等價性。
hashcode() 將引用位址對映到整型。
不當覆寫equals(),hashcode()。
不可邊類
equals() 比較抽象值。即比較行為等價性(對不可變類來說,觀察等價即行為等價)。
hashcode() 將抽象值對映的整型。
應當覆寫equals(),hashcode()。
自反性 x.equals(x)==true。
對稱性 y.equals(x)==true <—> x.equals(y)==true
傳遞性 x.equals(y)==true,y.equals(z)==true —> x.equals(z)==true
一致性 若xy引用的物件為變化,則反覆呼叫x.equals(y)的返回值當恆定
非空性 x.equals(null) == false
equals()示例
@override
public boolean equals(object otherobject)
等價物件必須有相同hash值
不等物件應盡可能避免相同hash值
hash值應當恆定(不可變物件的抽象值恆定,其hash自然恆定;可變物件用位址hash,固也恆定)
覆寫equals()時,也應覆寫hashcode()
否則,使用基於hash的資料結構時會出現混亂的行為。
軟體構造課程
課程目標 在高階語言程式設計的基礎上,認識軟體構造的質量標準與目標,學習軟體 構造的基本過程,從而具備面向質量目標的複雜軟體構造方法與能力 深入學習抽象資料型別 adt 與物件導向程式設計 oop 初步掌握面向關鍵質量目標 可理解性 可維護性 可復用性 健壯性 時 空效能 的軟體構造基本技術 了解軟...
軟體構造課程 ADT
abstract data types可簡單理解為乙個封裝的型別,它不需要提供各種詳細的資訊,但是可以有強大的功能。它具有一定的防禦性,只對外提供一些操作,但是內部可以是各種複雜的函式。對於乙個抽象類操作它的型別主要有4種 t非此型別的資料 t則為該資料型別。creators t t。比如對於int...
軟體構造 3 5 ADT和OOP中的等價性
adt 對資料的抽象 體現為一組對資料的操作 af 內部表示 抽象表示 基於af定義adt的等價操作 等價關係 自反 對稱 傳遞 從af的角度 af對映到同樣的結果 等價 從外部觀察者角度 對兩個物件呼叫任何相同的操作都會得到相同的結果 等價 引用等價性,即是否指向記憶體中同一位址 在快照圖中指向同...