結束上篇的HashMap擴容分析,今天來聊聊LinkedHashMap的特點,繼承了HashMap類(以下都是基於jdk1.8)。之前簡單聊過LinkedHashSet的特點,它的底層實際就是使用的LinkedHashMap。
繼承樹 |
LinkedHashMap的繼承樹如下圖:
特點 |
(1)由於繼承HashMap類,所以默認初始容量是16,加載因子是0.75。accessOrder爲false時,表明按照插入順序訪問;爲true時,表明按照訪問順序訪問。
public LinkedHashMap() {
super();
accessOrder = false;
}
public LinkedHashMap(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor);
accessOrder = false;
}
public LinkedHashMap(int initialCapacity) {
super(initialCapacity);
accessOrder = false;
}
public LinkedHashMap(int initialCapacity,
float loadFactor,
boolean accessOrder) {
super(initialCapacity, loadFactor);
this.accessOrder = accessOrder;
}
構造函數中使用父類的構造函數,關於父類可以指定初始容量的構造函數,已經在上篇博客中總結過了:HashMap指定初始容量的構造函數
(2)線程不安全,可以使用Map m = Collections.synchronizedMap(new LinkedHashMap(…)); 來實現線程安全的操作。
(3)具有fail-fast的特徵
(4)底層使用雙向鏈表,可以保存元素的插入順序,順序有兩種方式:一種是按照插入順序排序,一種按照訪問做排序。默認以插入順序排序。
(5)key和value允許爲null,key重複時,新value覆蓋舊value。