文章目錄
-
-
- 1.概述
- 2.類圖
- 3.構造函數
-
1.概述
LinkedHashSet是Set集合的一個實作,具有set集合不重複的特點,同時具有可預測的疊代順序,也就是我們插入的順序。
底層實作是LinkedHashMap 是以僅在構造方法上和HashSet有所差別
LinkedHashMap和LinkedHashSet都可以做到有序,但是不同點在于。LinkedHashMap可以根據通路順序來通路,也可以根據插入順序來通路。但是LinkedHashSet有序的通路隻能是根據插入順序來通路。
2.類圖

繼承了HashSet 和HashSet的差別就在于構造函數
實作了Set接口、序列化接口、克隆接口
3.構造函數
- 給定初始容量和裝載因子的構造函數
public LinkedHashSet(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor, true);
}
- 給定初始容量的構造函數
public LinkedHashSet(int initialCapacity) {
super(initialCapacity, .75f, true);
}
- 無參的構造函數
public LinkedHashSet() {
super(16, .75f, true);
}
- 給定初始集合元素的構造函數
public LinkedHashSet(Collection<? extends E> c) {
super(Math.max(2*c.size(), 11), .75f, true);
addAll(c);
}
以上的4種構造函數都調用了父類的一個構造函數 如下:
其底層實際是一個LinkedHashMap。而之前在解析HashSet源碼的時候就已經發現,基于HashSet的操作基本上都是對内部實作的HashMap進行操作。
是以LinkedHashMap同理。調用的父類提供的api操作内部的LinkedHashSet
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}