一文详解 利用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技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。

目录
相关文章
|
缓存 算法 安全
如何使用 LinkedHashMap 实现 LRU 缓存?
在上一篇文章里,我们聊到了 HashMap 的实现原理和源码分析,在源码分析的过程中,我们发现一些 LinkedHashMap 相关的源码,当时没有展开,现在它来了。 那么,LinkedHashMap 与 HashMap 有什么区别呢?其实,LinkedHashMap 的使用场景非常明确 —— LRU 缓存。今天,我们就来讨论 LinkedHashMap 是如何实现 LRU 缓存的。
228 0
|
SQL Java 数据库连接
深入解析@MapperScan注解:简化MyBatis接口与映射器的关联
在Java持久化领域,MyBatis是一个广泛使用的ORM(对象关系映射)框架,用于将数据库中的数据映射到Java对象中。MyBatis的核心概念是SQL映射器(Mapper),它定义了数据库操作的方法。为了简化Mapper接口与映射器的关联,MyBatis提供了`@MapperScan`注解。本文将深入探讨`@MapperScan`注解的作用、用法,以及在MyBatis应用中的应用场景。
2341 0
|
存储 缓存 NoSQL
MySQL索引详解(一文搞懂)
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
45393 17
MySQL索引详解(一文搞懂)
|
缓存 网络协议 CDN
直播app源码的搭建,仍有许多问题等待我们去解决
直播app源码的搭建,仍有许多问题等待我们去解决
|
8月前
|
算法 数据挖掘 Python
LeetCode题目25 hard:K个一组翻转链表 【分治策略 Python】
LeetCode题目25 hard:K个一组翻转链表 【分治策略 Python】
|
8月前
|
JavaScript Java API
30.【TypeScript 教程】Reflect Metadata
30.【TypeScript 教程】Reflect Metadata
163 4
|
存储 Java 索引
认真研究Java集合之LinkedList的实现原理
认真研究Java集合之LinkedList的实现原理
116 0
|
测试技术 Docker 索引
性能提升40倍——线上真实重构案例分享
性能提升40倍——线上真实重构案例分享
269 0
阿里二面:main 方法可以继承吗?
main方法能重载么? main方法能被其他方法调用么? main方法可以继承么?
|
6月前
|
缓存 算法 前端开发
深入理解缓存淘汰策略:LRU和LFU算法的解析与应用
【8月更文挑战第25天】在计算机科学领域,高效管理资源对于提升系统性能至关重要。内存缓存作为一种加速数据读取的有效方法,其管理策略直接影响整体性能。本文重点介绍两种常用的缓存淘汰算法:LRU(最近最少使用)和LFU(最不经常使用)。LRU算法依据数据最近是否被访问来进行淘汰决策;而LFU算法则根据数据的访问频率做出判断。这两种算法各有特点,适用于不同的应用场景。通过深入分析这两种算法的原理、实现方式及适用场景,本文旨在帮助开发者更好地理解缓存管理机制,从而在实际应用中作出更合理的选择,有效提升系统性能和用户体验。
287 1

热门文章

最新文章