LinkedHashMap源码分析

public class LinkedHashMap<K,V>
    extends HashMap<K,V>
    implements Map<K,V>

继承HashMap 并实现了Map的接口

其中HashMap用Node<K,V>[] table;实现了桶,即相当于用数组实现了 List(类似于arraylist)

那么LinkedHashMap源码中是如何实现?

猜测和LinkedList一样也是用链表实现了一个个的桶,那么具体代码实现?

(head 头部   tail wei)

看到一开始的代码中有个static class Entry<K,V>  相比较HashMap的Node多了before和after属性那么也就是说明,猜测应该是成立的LinkedHashMap是用链表+(链表或红黑树)实现?具体方式还需要接着解析源码:

 

那么初始化LinkedHashMap做了什么?

调用了HashMap的 初始化方法 初始一些变量?threshold和loadFactor

 final boolean accessOrder;这个参数是干嘛? 用false表示用于插入顺序 

注释中:

    /**
     * The iteration ordering method for this linked hash map: <tt>true</tt>
     * for access-order(访问顺序), <tt>false</tt> for insertion-order(插入顺序).
     *
     * @serial
     */

可以初始化时指定顺序

那么是如何保证顺序的?

以插入节点为例:

没有重写 故 调用的是hashmap父类的方法:

但此处注意的是 LinkedHashMap自己实现了方法newNode

所以任然调用了HashMap的数组?依旧是用数组+(链表或是二叉树)的实现???

新建了一个Entry<K,V>后 linkNodeLast(p)是干嘛的?

将p指定到尾部?如果尾部为null 则将p指定为head头部,否则将p为原先的tail的尾部,原先的尾部 为当前p的前面元素。

// link at the end of list 按照注释表示 在list的尾部进行链接(对第一个Entry<K,V>链表 至于head)

这个也相同 新建一个树 并至于head和tail

故for each的时候只需要将head进行一直after就好了?未完待续。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值