集合類的相關知識

2021-08-31 05:53:38 字數 1641 閱讀 9493

set集合類似乙個罐子,一旦把物件丟進set集合,集合裡多個物件之間沒有明顯的順序。set集合裡面不允許包含相同的元素,如果試圖把兩個相同元素加入到乙個set中,則新增操作失敗,add方法返回false,且新元素不會被加入。

set集合判斷兩個物件是不是相同是根據equals方法,也就是說兩個物件的equals方法比較返回true,set集合是不會接受這兩個物件。

例如:public static void main(string args)

}package com.action;

public class b

}public class c

public int hashcode()

}public static void main(string args)

結果:[com.action.c@2, com.action.a@d9f9c3, com.action.b@1, com.action.b@1, com.action.a@757aef]

可以看到,向集合中分別新增了2個a,2個b,2個c,其中c重寫equals方法,並且返回true,hahscode方法總是返回2,導致hashset將會把2個c物件當成乙個物件。而a和b只滿足了hashset判斷物件相同條件的一種,所以如果需要把乙個物件放入hashset中,如果重寫該物件的equals方法,也必須重寫該類的hashcode方法,規則是2個物件通過equals方法比較返回true,這兩個物件的hashcode也應該相同。

當向hashset中新增可變物件時,必須十分小心,如果修改hashset集合中的物件,有可能導致物件與集合中的其他物件相等,從而導致hashset無法準確訪問物件。

linkedhashset是hashset集合的子類,但是他需要維護元素的插入順序,效能略低於hashset的效能,但在迭代訪問set元素時,效能比較好。

treeset是sortedset介面的惟一實現,可以確保集合元素處於排序狀態。

treeset,不是根據元素的插入順序進行排序,而是根據元素的實際值來進行排序的。treeset採用紅黑樹資料結構對元素進行排序,支援兩種排序方式,自然排序,和定製排序。預設情況次採用自然排序。(呼叫集合元素的compareto方法來比較兩個元素的大小,然後按照集合元素公升序排列)

試圖把乙個物件新增進treeset中,該物件必須實現comparable介面,否則會丟擲異常。因為treeset會呼叫他集合中的compareto方法與集合中的其他元素進行比較。

判斷加入到其中的物件相等的原則:兩個物件通過equals比較返回false,通過compareto比較返回0.

例如:package com.action;

public class a implements comparable

public int compareto(object obj)

}public static void main(string args)

列印結果:[com.action.a@757aef, com.action.a@d9f9c3]

因為aequals返回true,compareto返回1,不滿足是同一物件條件,所以儲存的是兩個物件。

注釋:在hashset和treeset集合中只放入不可變物件。如果放入可變物件,當可變物件的屬性被修改的時候,容易出錯。

list判斷兩個物件相等只要通過equals方法比較返回true即可。

Map集合相關知識

1 map集合 map集合區別於collection集合,是它是以鍵值對 key value 儲存資料。可以儲存一對物件,即可以儲存兩個物件,而且這兩個物件是key value結構的,就是這個兩個物件是有對映關係的。這種結構的最大的好處,就是可以根據key找到關聯的value值。map介面的定義 p...

類的相關知識

1.資料屬性 2.函式屬性 class car 這是乙個車的類 brand nissan def drift print 漂移完成了乙個漂亮的過彎 def brake self print 完成了乙個完美的剎車 print dir car 屬性名查詢,以列表形式存放 print car.dict 檢...

類的相關知識

類的三大特性 1 封裝 類裡面的屬性和方法對外是透明的,不可直接訪問的。2 繼承 乙個類可以派生出子類,子類繼承父類的屬性和方法。3 多型 乙個介面,多種實現。即類中提供乙個統一介面,供例項使用。多型演示 定義乙個動物類,例項化多個動物。每種動物都有 叫 的功能,使用乙個介面去呼叫它們的這個功能。示...