天天看點

java linkedhashset_跟我學Java程式設計—掌握LinkedHashSet的用法

前面介紹了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的用法有個具體了解。

java linkedhashset_跟我學Java程式設計—掌握LinkedHashSet的用法

LinkedHashSet 底層采用雙向連結清單實作,可以保證元素的插入順序,又因為是HashSet的子類,是以插入的元素不能重複。

運作上面的程式,輸出結果如下圖所示:

java linkedhashset_跟我學Java程式設計—掌握LinkedHashSet的用法

圖 14-5 LinkedHashSetTest輸出結果

從上圖可以看出,LinkedHashSet添加了多個内容為“a”的String對象,但隻有一個String對象添加成功。另外,元素的輸出順序也和添加元素的順序一緻。

LinkedHashSet需要維護元素的插入順序,是以性能略低于HashSet的性能,但在疊代通路Set裡的全部元素時将有很好的性能,因為它以連結清單來維護内部順序。

■ 知識點撥

LinkedHashSet 是 Set 的一個具體實作,其維護着一個運作于所有條目的雙重連結清單。此連結清單定義了疊代順序,該疊代順序可為插入順序或是通路順序。

如果需要疊代的順序為插入順序或者通路順序,那麼 LinkedHashSet 是需要你首先考慮的。