LinkedHashMap
2022-08-27 14:23:30 9 举报
AI智能生成
为面试做准备,用于概要记录某些重点内容
作者其他创作
大纲/内容
源码
基于HashMap上添加了额外的东西
LinkedHashMap多了Entry类型的head、tail指针
布尔类型的accessOrder用于开启/关闭访问顺序
Entry静态类中多了Entry类型的before、after指针
实现了HashMap的3个方法
afterNodeAccess()
插入顺序
用一条链把所有元素链起来,用于插入顺序。
成员变量head、tail分别指向链头链尾。
采用尾插法
打印的时候可以看到是从链头遍历到链尾,最先插入的元素在链头
访问顺序原理
访问顺序也是基于前面提到的链表
如果有使用accessOrder开启访问顺序
get()之后,把元素移到链表尾部。由afterNodeAccess()实现
实现LRU
put()插入元素时,里面调用afterNodeInsertion()
afterNodeInsertion()会判断元素个数是否LRU指定的缓存个数大小,
如果超过则调用removeNode()移除header指向的元素(即链头)
如果超过则调用removeNode()移除header指向的元素(即链头)
判断是否超过 LRU指定的缓存个数,是由removeEldestEntry()实现。
函数返回true则移除最久未被使用的元素(即链头)
函数返回true则移除最久未被使用的元素(即链头)
面试问题
如何实现LRU
开启accessOrder访问顺序
实现removeEldestEntry()即可,令它返回true
0 条评论
下一页