集合4 集合 Collection介面 Set介面

2022-09-14 23:00:40 字數 1174 閱讀 7277

儲存無序的、不可重複的資料

三種實現類:

注:1. set介面中沒有額外定義新的方法,使用的都是collection中宣告過的方法

​ 2. 向set中新增的資料,其所在類一定要重寫hashcode()和equals()且重寫的hashcode()和equals()盡可能保持一致:相等的物件具有相等的雜湊碼

以hashset為例說明

無序性:不等於隨機性。儲存的資料在底層陣列中並非按照陣列索引的順序新增,而是根據資料的雜湊值決定的

不可重複性:保證新增的元素按照equals()判斷時,不能返回true:即相同的元素只能新增乙個

我們向hashset中新增元素 a,首先呼叫元素 a 所在類的hashcode()方法,計算元素 a 的雜湊值,此雜湊值接著通過某種演算法計算出在hashset底層陣列中存放的位置(即:索引位置),判斷陣列此位置上是否有元素:

如果此位置上沒有其他元素,則元素 a 新增成功。

如果此位置上有其他元素 b(或以鍊錶形式存在多個元素),則比較元素 a 與元素 b 的雜湊值:

如果雜湊值不相同,則 a 元素新增成功------>情況2

如果雜湊值相同,則進而需要呼叫元素 a 所在類的equals()方法:

equals()返回true,元素 a 新增失敗

equals()返回false,則元素 a 新增成功------>情況3

對於新增成功的情況2與情況3而言,元素 a 與已經存在指定索引位置上的資料以鍊錶的方式儲存。

jdk7:元素 a 放到陣列中,指向原來的元素

jdk8:原來的元素在陣列中,指向元素 a

總結:七上八下

hashset底層結構:陣列+鍊錶

遍歷的時候,按照新增的順序遍歷

linkedhashset作為hashset的子類,在新增資料的同時,每個資料還維護了兩個引用,記錄此資料的前乙個資料和後乙個資料(雙向鍊錶):

優點:對於頻繁的遍歷操作,linkedhashset的效率比hashset高

向treeset中新增的資料,要求是相同類的物件

兩種排序方法:自然排序(實現comparable介面)、定製排序(comparator)

自然排序中,比較兩個物件是否相同的標準為:compareto()返回0,不再是equals()

定製排序中,比較兩個物件是否相同的標準為:compara()返回0,不在是equals()

4 集合與有序集合

特性 無序 隨機操作 唯一性,確定性 zrevrange key start stop 將集合降序排列,取在start,stop 之間的元素 zrangebyscore key min max withscore limit offset n 將score在 min,max 之間的元素跳過offse...

scala基礎4 集合

map set list 集合 可變集合可以在適當的地方被更新或擴充套件,意味著你可以修改 新增 移除乙個集合的元素。而不可變集合類,相比之下,永遠不會改變。不過,你仍然可以模擬新增,移除或更新操作。但是這些操作都將返回乙個新的集合,同時原來的集合不發生改變。不可變的都在immutable裡,可變的...

ue4集合型別 UE4 集合 TSet容器

一 tset是什麼 ue4中,除了tarray動態陣列外,還提供了各種各樣的模板容器。這一節,我們就介紹集合容器 tset。類似於tarray,尖括號裡面的t是模板型別,可以是任何c 型別。乙個集合表示了一組互不重複的資料元素。比如tset表示了一組float集合,tset表示了一組fstring集...