JDK1.8源码(九)——java.util.LinkedHashMap 类

 目录

public class LinkedHashMap<K,V>    extends HashMap<K,V>    implements Map<K,V>
复制代码

  

2、字段属性

   ①、Entry<K,V>

复制代码
    static class Entry<K,V> extends HashMap.Node<K,V> {         Entry<K,V> before, after;         Entry(int hash, K key, V value, Node<K,V> next) {             super(hash, key, value, next);         }     }
复制代码

  LinkedHashMap 的每个元素都是一个 Entry,我们看到对于 Entry 继承自 HashMap 的 Node 结构,相对于 Node 结构,LinkedHashMap 多了 before 和 after 结构。

  下面是Map类集合基本元素的实现演变。

  

  LinkedHashMap 中 Entry 相对于 HashMap 多出的 before 和 after 便是用来维护 LinkedHashMap  插入 Entry 的先后顺序的。

  ②、其它属性

复制代码
//用来指向双向链表的头节点transient LinkedHashMap.Entry<K,V> head; //用来指向双向链表的尾节点transient LinkedHashMap.Entry<K,V> tail; //用来指定LinkedHashMap的迭代顺序 //true 表示按照访问顺序,会把访问过的元素放在链表后面,放置顺序是访问的顺序 //false 表示按照插入顺序遍历final boolean accessOrder;
复制代码

   注意:这里有五个属性别搞混淆的,对于 Node  next 属性,是用来维护整个集合中 Entry 的顺序。对于 Entry before,Entry after ,以及 Entry head,Entry tail,这四个属性都是用来维护保证集合顺序的链表,其中前两个before和after表示某个节点的上一个节点和下一个节点,这是一个双向链表。后两个属性 head 和 tail 分别表示这个链表的头节点和尾节点。

  PS:关于双向链表的介绍,可以看这篇博客

3、构造函数

  ①、无参构造

复制代码
1     public LinkedHashMap() { 2         super(); 3         accessOrder = false; 4     }
复制代码

  调用无参的 HashMap 构造函数,具有默认初始容量(16)和加载因子(0.75)。并且设定了 acc

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信