Java中的集合(十四) Map的实现类LinkedHashMap
一、LinkedHashMap的简介
LinkedHashMap是Map接口的实现类,继承了HashMap,它通过重写父类相关的方法,来实现自己的链接列表特性。但是很多方法都直接复用了父类HashMap的方法。底层数据结构是哈希表+双向链表,具有可预知的迭代顺序。允许使用null值和null键存储。
LinkedHashMap实现与HashMap的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。
注意,此实现不是同步的。如果多个线程同时访问链接的哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。
(一)、LinkedHashMap与Map的关系
二、LinkedHashMap的继承结构
从LinkedHashMap继承结构可以看出,LinkedHashMap与HashMap类似,可参考 Java集合(十)实现Map接口的HashMap。
三、LinkedHashMap的构造方法
四、LinkedHashMap主要成员属性
LinkedHashMap定义了几个主要的成员属性:head、tail、accessOrder。
1、head
是一个Entry<K,V>类型,维护的是链表的头部元素。
2、tail
是一个Entry<K,V>类型,维护的是链表的尾部部元素。
3、accessOrder
排序模式,是boolean类型,当为true时,记录访问顺序,为false时,记录插入顺序。
4、LinkedHashMap.Entry
Entry是LinkedHashMap定义的内部类,继承了 HashMap.Node<K,V>,该Entry除了保存当前对象的引用外,还保存了其上一个元素before和下一个元素after的引用,从而在哈希表的基础上又构成了双向链接列表。
五、LinkedHashMap常用API
LinkedHashMap与HashMap类似,可参考 Java集合(十)实现Map接口的HashMap。
六、LinkedHashMap的遍历
LinkedHashMap与HashMap类似,可参考 Java集合(十)实现Map接口的HashMap。
七、LinkedHashMap和HashMap的异同
(一)、相同点
- 都是非同步,线程不安全的。
- 负载因子(0.75)和默认初始容量(16)相同。
- 扩容方式相同(容量 * 负载因子)。
(二)、不同点
- HashMap无序,LinkedHashMap有序。