一文详解 利用LinkedHashMap实现Lru机制

简介: Android中的LRU采用什么机制实现的? 通过这篇文章我们一起进行分析。

LinkedHashMap 根据链表中元素的顺序可以分为:
按插入顺序的链表,和按访问顺序(调用get方法)的链表

按插入顺序的链表,这个不做介绍。
下边来说明按照“访问顺序的(调用get方法)的链表”的实现原理:

一、创建链表

LinkedHashMap<String, Bitmap> map = new LinkedHashMap<String, Bitmap>(0, 0.75f, true);

二、插入元素(key0,value0)、(key1,value1)后的链表结构

LinkedHashMap是一个双向链表,向链表中插入两个元素key0和key1后,双向链表的结构如下图所示:

map.put(key0, value0);
map.put(key1, value1);

这里写图片描述

三、调用map.get(key0)后的链表结构如下:

map.get(key0);

这里写图片描述

四、移除最早使用的元素时:

header.next()的数据为 (key1,value1)

注:
每次调用 map.get(key)方法 后,都会将该元素放到Header元素的上一个;每次移除时,都会先移除header.next()元素;从而达到了保留最近使用的元素,移除了最早使用的元素。这就是Lru的实现原理。

= THE END =

文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。
文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。

目录
相关文章
|
2月前
|
存储 缓存 Java
LRU是什么?如何实现?
LRU(Least Recently Used)是一种常用的缓存淘汰策略,其核心思想是:如果一个数据在最近一段时间内没有被访问到,那么在未来它被访问的可能性也很小。因此,当缓存满了的时候,最久未使用的数据会被淘汰
|
8月前
|
缓存 算法 Java
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,万字解析
数据结构~缓存淘汰算法--LRU算法(Java的俩种实现方式,万字解析
|
8月前
|
存储 Java Serverless
谈谈我对HashMap扩容机制的理解及底层实现
谈谈我对HashMap扩容机制的理解及底层实现
|
8月前
|
存储 缓存 Java
java如何实现一个LRU(最近最少使用)缓存? 要求:设计一个LRU缓存,支持get和put操作。当缓存满时,需要淘汰最近最少使用的元素。要求使用双向链表+哈希表的数据结构来实现,并保证get和put操作的时间复杂度为O(1)。
java如何实现一个LRU(最近最少使用)缓存? 要求:设计一个LRU缓存,支持get和put操作。当缓存满时,需要淘汰最近最少使用的元素。要求使用双向链表+哈希表的数据结构来实现,并保证get和put操作的时间复杂度为O(1)。
72 1
|
存储 缓存 算法
【算法】不使用LinkedHashMap实现一个LRU缓存
【算法】不使用LinkedHashMap实现一个LRU缓存
120 0
|
算法 NoSQL Java
LRU的java实现
LRU的java实现
133 0
|
存储 缓存 算法
【基础篇】4 # 链表(上):如何实现LRU缓存淘汰算法?
【基础篇】4 # 链表(上):如何实现LRU缓存淘汰算法?
179 0
【基础篇】4 # 链表(上):如何实现LRU缓存淘汰算法?
JUC学习(六):HashMap和HashSet的线程不安全问题分析和解决方案(写时复制技术、ConcurrentHashMap)
JUC学习(六):HashMap和HashSet的线程不安全问题分析和解决方案(写时复制技术、ConcurrentHashMap)
111 0
JUC学习(六):HashMap和HashSet的线程不安全问题分析和解决方案(写时复制技术、ConcurrentHashMap)
|
缓存 算法 安全
如何使用 LinkedHashMap 实现 LRU 缓存?
在上一篇文章里,我们聊到了 HashMap 的实现原理和源码分析,在源码分析的过程中,我们发现一些 LinkedHashMap 相关的源码,当时没有展开,现在它来了。 那么,LinkedHashMap 与 HashMap 有什么区别呢?其实,LinkedHashMap 的使用场景非常明确 —— LRU 缓存。今天,我们就来讨论 LinkedHashMap 是如何实现 LRU 缓存的。
201 0
|
缓存 算法 Java
LFU缓存算法及Java实现
LFU 缓存 算法 Java 实现
684 1
LFU缓存算法及Java实现