结束上篇的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。