LinkedHashMap代码详解(一)

  • 时间:
  • 浏览:0
  • 来源:彩神3D_神彩3D官方

put():

但会 LinkedHashMap如此put方式,put操作用的还是HashMap的方式,但会 重写了newNode(int hash, K key, V value, Node e) ,afterNodeAccess(Node e),afterNodeInsertion(boolean evict)方式

1 table中不处在相同的key

处在了节点数据操作(value替换),但会 开启了LRU(accessOrder=true),则将修改的节点装进链表尾部,HashMap.afterNodeAccess() 为空函数

LinkedHashMap overwirte了该方式

LinkedhashMap重写了newNode方式,将新增的节点加入链表尾部,上代码

HashMap 在遍历map时,数据是无序的,在但会 都要按照put顺序遍历时,就用到了LinkedHashMap,LinkedHashMap是HashMap的子类,但会 用四根双向链表来存储数据插入的顺序

该参数如此在LinkedHashMap new时指定,都要一齐指定扩展因子loadFactor 默认为0.75f

3 在执行完put操作后,调用afterNodeInsertion方式

evict 在hashMap中默认为true,LinkedHashMap.removeEldestEntry ()默认返回false,

该方式的yongfasj用法是 配合LRU算法,自定义Class继承LinkedHashMap方式并重写removeEldestEntry 方式,

在特定条件下返回true,移除链表中最左侧的节点

还都还上能 使用该价值形式进行缓存创建,保留最近活跃的数据,开启LRU都要将开头提到的accessOrder 置为true

2 table数组中处在相同的key

get():

LinkedHashMap get方式,还都还上能 看后 和hashMap是一致的,而是 我加了accessOrder 判断,开启LRU后,将获取的数据装进链表的最右侧,提高该节点的活跃程度