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就好了?未完待续。。。。