前面介紹了Set接口的實作類HashSet,本節介紹Set接口的另一個實作類LinkedHashSet。相對HashSet來說,LinkedHashSet存儲結構是一個雙向連結清單,是以它存儲的元素是有序的。
LinkedHashSet繼承自HashSet,源碼更少、更簡單,唯一的差別是LinkedHashSet内部使用的是LinkHashMap。這樣做的意義或者好處就是LinkedHashSet中的元素順序是可以保證的,也就是說周遊序和插入序是一緻的。
LinkedHashSet類支援四個構造函數。
第一種構造函數初始化一個空的LinkedHashSet:
LinkedHashSet( );
第二種構造函數使用Collection元素集初始化LinkedHashSet:
LinkedHashSet(Collection c)
第三種構造函數用給定的容量初始化LinkedHashSet:
LinkedHashSet(int capacity)
第四種構造函數通過傳入的容量和填充比初始化LinkedHashSet:
LinkedHashSet(int capacity, float fillRatio)
下面先通過一個應用執行個體對LinkedHashSet的用法有個具體了解。
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SNiZWMzEzNldDNwQGZzYDOlFTM3gDOjhjNiJjMjFjNy8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
LinkedHashSet 底層采用雙向連結清單實作,可以保證元素的插入順序,又因為是HashSet的子類,是以插入的元素不能重複。
運作上面的程式,輸出結果如下圖所示:
圖 14-5 LinkedHashSetTest輸出結果
從上圖可以看出,LinkedHashSet添加了多個内容為“a”的String對象,但隻有一個String對象添加成功。另外,元素的輸出順序也和添加元素的順序一緻。
LinkedHashSet需要維護元素的插入順序,是以性能略低于HashSet的性能,但在疊代通路Set裡的全部元素時将有很好的性能,因為它以連結清單來維護内部順序。
■ 知識點撥
LinkedHashSet 是 Set 的一個具體實作,其維護着一個運作于所有條目的雙重連結清單。此連結清單定義了疊代順序,該疊代順序可為插入順序或是通路順序。
如果需要疊代的順序為插入順序或者通路順序,那麼 LinkedHashSet 是需要你首先考慮的。