Java中的集合(十四) Map的实现类LinkedHashMap

 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有序。

 

posted @ 2020-05-15 14:37  凌倾-学无止境  阅读(504)  评论(0编辑  收藏  举报