Collection子介面之二 Set介面

2021-10-05 17:18:09 字數 2220 閱讀 5592

1、set介面是collection的子介面, set介面沒有提供額外的方法

2、set 集合不允許包含相同的元素,如果試把兩個相同的元素加入同乙個set 集合中,則新增操作失敗。

3、set 判斷兩個物件是否相同不是使用 == 運算子,而是根據 equals() 方法

1、hashset 是 set 介面的典型實現,大多數時候使用 set 集合時都使用這個實現類。

2、hashset 按 hash 演算法來儲存集合中的元素,因此具有很好的訪問、查詢、刪除效能。

hashset 具有以下特點:

向hashset中新增元素的過程:

1、 當向 hashset 集合中存入乙個元素時, hashset 會呼叫該物件的 hashcode() 方法來得到該物件的 hashcode 值, 然後根據 hashcode 值, 通過某種雜湊函式決定該物件在 hashset 底層陣列中的儲存位置。 (這個雜湊函式會與底層陣列的長度相計算得到在陣列中的下標, 並且這種雜湊函式計算還盡可能保證能均勻儲存元素, 越是雜湊分布,該雜湊函式設計的越好)

2、 如果兩個元素的hashcode()值相等, 會再繼續呼叫equals方法, 如果equals方法結果為true, 新增失敗; 如果為false, 那麼會儲存該元素, 但是該陣列的位置已經有元素了,那麼會通過鍊錶的方式繼續鏈結。

如果兩個元素的 equals() 方法返回 true,但它們的 hashcode() 返回值不相等, hashset 將會把它們儲存在不同的位置,但依然可以新增成功。

底層也是陣列, 初始容量為16, 當如果使用率超過0.75(16*0.75=12)就會擴大容量為原來的2倍。 (16擴容為32, 依次為64,128…等)

重寫 hashcode() 方法的基本原則

1、 在程式執行時,同乙個物件多次呼叫 hashcode() 方法應該返回相同的值。

2、當兩個物件的 equals() 方法比較返回 true 時,這兩個物件的 hashcode()方法的返回值也應相等。

3、物件中用作 equals() 方法比較的 field,都應該用來計算hashcode 值。

重寫 equals() 方法的基本原則

1、當乙個類有自己特有的「邏輯相等」概念,當改寫equals()的時候,總是要改寫hashcode(),根據乙個類的equals方法(改寫後),兩個截然不同的例項有可能在邏輯上是相等的,但是,根據object.hashcode()方法,它們僅僅是兩個物件。

2、 因此,違反了「相等的物件必須具有相等的雜湊碼」。

3、結論:複寫equals方法的時候一般都需要同時複寫hashcode方法。 通常參與計算hashcode的物件的屬性也應該參與到equals()中進行計算。

1、linkedhashset 是 hashset 的子類

2、linkedhashset 根據元素的 hashcode 值來決定元素的儲存位置,但它同時使用雙向鍊錶維護元素的次序,這使得元素看起來是以插入順序儲存的。

3、linkedhashset插入效能略低於 hashset, 但在迭代訪問 set裡的全部元素時有很好的效能。

4、linkedhashset 不允許集合元素重複。

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

2、treeset底層使用紅黑樹結構儲存資料

3、新增的方法如下: (了解)

comparator comparator()

object first()

object last()

object lower(object e)

object higher(object e)

sortedset subset(fromelement, toelement)

sortedset headset(toelement)

sortedset tailset(fromelement)

4、treeset 兩種排序方法: 自然排序和定製排序。預設情況下, treeset 採用自然排序。

treeset和後面要講的treemap採用紅黑樹的儲存結構

特點:有序,查詢速度比list快

Collection子介面之二 Set介面

在set中判斷元素是否重複 使用equals 方法 如果兩個物件的equals方法返回true 則他們的hashcode值應該也是相等的。換句話來說 如果兩個物件的equals返回是true 但是hashcode不一致 則也會認為元素不重複 hashset 具有以下特點 hashset集合判斷兩個元...

Collection子介面 List介面

3.常用實現類 4.原始碼分析 難點 4.2 linkedlist的原始碼分析 4.3 vector的原始碼分析 5.儲存的元素的要求 1.儲存的資料特點 儲存序的 可重複的資料。2.常用方法 記住 增 add object obj 刪 remove int index remove object ...

Collection子介面 Set介面

1.儲存的資料特點 無序的 不可重複的元素 具體的以hashset為例說明 無序性 不等於隨機性。儲存的資料在底層陣列中並非照陣列索引的順序新增,而是根據資料的雜湊值決定的。不可重複性 保證新增的元素照equals 判斷時,不能返回true.即 相同的元素只能新增乙個。2.元素新增過程 以hashs...