linkedhashmap 是如何维护双向链表的?
数据结构:数组+单向链表+双向链表
每一个节点都是双向链表的节点,维持插入顺序。head指向第一个插入的节点,tail指向最后一个节点。
数组+单向链表是hashmap的结构,用于记录数据。
双向链表保存的是插入顺序,顺序访问。
next是用于维护数据位置的,before和after是用于维护插入顺序的。
遍历分为插入方式和访问方式:
插入方式:遍历时和插入时位置固定
访问方式:put和get方法都会将当前元素移到双向链表的最后
是否使用访问顺序遍历,是通过**LinkedHashMap 的accessOrder参数控制的,true为访问顺序遍历,false为插入顺序遍历。**默认是false,插入方式遍历。如果是true,注意并发修改异常。因为get方法会修改linkedhashmap的结构。