- linkHashMap继承HashMap
- LinkHashMap的底层维护了一个双向列表 ,重写了HashMap的 的实体类Entry 实现了双向列表,内部结构还是数组+链表
- 双向链表
- linkHashMap和HashMap的区别
- HashMap的存储和获取是无序的
- LinkHashMap是有序的 (1,根据插入顺序排序,2,根据访问顺序排序(accessOrder))
- LRUCache
- 最简单的LRUCache实现 最关键的参数是accessOrder 当为true的时候安装访问情况排序 把访问的数据排在链表的末尾
- 面试题
- linkedHashMap为什么能用来做LURCache
- LinkedHashMap自身已经实现了顺序存储,默认情况下是按照元素的添加顺序存储,也可以启用按照访问顺序存储,即最近读取的数据放在最前面,最早读取的数据放在最后面,然后它还有一个判断是否删除最老数据的方法removeEldestEntry(),默认是返回false,即不删除数据,我们使用LinkedHashMap实现LRU缓存的方法就是对LinkedHashMap实现简单的扩展,扩展方式有两种,一种是inheritance,一种是delegation,具体使用什么方式看个人喜好
- delegation 代理方式 (Lru类中使用LinkeHashMap)
- inheritance 实现 (Lru类继承 LinkHashMap)
- LinkedHashMap自身已经实现了顺序存储,默认情况下是按照元素的添加顺序存储,也可以启用按照访问顺序存储,即最近读取的数据放在最前面,最早读取的数据放在最后面,然后它还有一个判断是否删除最老数据的方法removeEldestEntry(),默认是返回false,即不删除数据,我们使用LinkedHashMap实现LRU缓存的方法就是对LinkedHashMap实现简单的扩展,扩展方式有两种,一种是inheritance,一种是delegation,具体使用什么方式看个人喜好
- linkedHashMap为什么能用来做LURCache
- 参考