Java 集合框架 Set實現

2021-08-16 22:28:20 字數 1421 閱讀 1277

集合實現被分組到通用目標和特殊目的實現中。

有三個通用的集合實現:hashset、treeset和linkedhashset。這三個中的任何乙個通常是簡單的。hashset比treeset(大多數操作的常量時間和logtime)要快得多,但是沒有提供安全保證。如果需要在sortedset介面中使用操作,或者需要使用值排序迭代,使用treeset;否則,使用hashset。很有可能你會在大部分時間裡使用hashset。

linkedhashset在某種意義上介於hashset和treeset之間。它作為乙個雜湊表實現,其中有乙個鍊錶在其中執行,它提供了插入排序的迭代(最近插入到最近的),並且執行速度幾乎和hashset一樣快。linkedhashset實現將其客戶機從hashset提供的未指定的、通常混亂的順序中保留下來,而不會引起與treeset相關的增加的成本。

關於hashset,值得記住的一點是,迭代在條目數和桶數(容量)的和中是線性的。因此,選擇乙個過高的初始容量既浪費時間又浪費時間。另一方面,在每次被迫增加容量的情況下,通過複製資料結構來選擇低浪費時間的初始容量。如果沒有指定初始容量,預設值是16。在過去,選擇質數作為初始容量有一定的優勢。這不再是事實。在內部,容量總是集中到2的冪。初始容量是使用int建構函式指定的。下面一行**分配了乙個初始容量為64的hashset。

sets = new hashset(64);
如果您接受預設的負載因素,但是要指定初始容量,那麼選擇乙個與您期望的開始增長的大小的兩倍的數字。如果你的猜測是錯誤的,你可能會浪費一點空間、時間或兩者,但這不太可能是乙個大問題。

linkedhashset具有與hashset相同的調優引數,但是迭代時間不受容量影響。treeset沒有調優引數。

有兩個特殊目的集實現——enumset和copyonwritearrayset。

enumset是列舉型別的高效能集實現。列舉集的所有成員必須是相同的列舉型別。在內部,它由乙個位向量表示,通常為乙個長。列舉集支援列舉型別的範圍。例如,考慮到每週的enum宣告,您可以在工作日中迭代。enumset類提供了乙個靜態工廠,使它變得簡單。

for (day d : enumset.range(day.monday, day.friday))

system.out.println(d);

enum集合還提供了乙個豐富的、型別安全的替換傳統位標誌。

enumset.of(style.bold, style.italic)
copyonwritearrayset是乙個由複製-on-write陣列支援的集合實現。所有的假定操作,例如add、set和remove,都是通過建立陣列的新副本實現的;不需要鎖定。甚至迭代可以安全地同時進行元素插入和刪除。與大多數的set實現不同,新增、刪除和包含方法需要時間與集合的大小成比例。這個實現只適合很少修改但經常迭代的集合。它非常適合維護必須防止重複的事件處理程式列表。

Java中set集合框架

set 元素不可以重複,是無序的 set介面中的方法和collection一致 hashset內部資料結構是雜湊表,是不同步的,無序,不重複 hashset hs new hashset hashset hs new linkedhashset 有序 hs.add new person value1...

集合框架Set

1 hashset雜湊表儲存底層 2 list與set判斷重複物件的區別 3 集合框架treeset 的自然排序 比較器排序 一般來說 set是無序的 無下標 但是jdk1.8版本已經可以排序 1 hashset雜湊表儲存底層 set 會去除重複 資料結構是雜湊表 hashseths new has...

集合框架Set

元素是無序 存入和取出的順序不一定一致 元素不可以重複 hashset雜湊表儲存 底層資料結構是雜湊表 1.1hashset的元素不可重複 hashset元素是不可重複的,針對於基本資料型別以及string,引用資料型別 物件 去重需要重寫hashcode方法以及equals方法 論證 1.2has...