LRUCache

LruCache 使用及原理 *要想成为高级安卓工程师,必须掌握许多基础的知识。**在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门即可获取!F.jpg" />**要想成为高级安卓工程师,必须掌握许多基础的知识。**在工作中,这些原理可以极大的帮助我们理解技术,在面试中,更是可以帮助我们应对大厂面试官的刁难。[外链图片转存中…(img-HoIDz4cZ-1712290143267)] 阅读详情
import java.util.LinkedHashMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class LRUCache<K, V> extends LinkedHashMap<K, V> {

	private static final long serialVersionUID = -656812640814484468L;

	/** 默认最大容量 */
	private static final int DEFAULT_MAX_CAPACITY = 300;

	private static final int INITIALCAPACITY = 16;

	/** 负载因子 */
	private static final float DEFAULT_LOAD_FACTOR = 0.75f;

	private final Lock lock = new ReentrantLock();

	private volatile int maxCapacity;

	/**
	 * <br>
	 * ------------------------------<br>
	 */
	public LRUCache() {
		this(DEFAULT_MAX_CAPACITY);
	}

	public LRUCache(int maxCapacity) {
		super(INITIALCAPACITY, DEFAULT_LOAD_FACTOR, Boolean.TRUE);
		this.maxCapacity = maxCapacity;
	}

	@Override
	protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {
		return size() > maxCapacity;
	}

	@Override
	public V get(Object key) {
		try {
			lock.lock();
			return super.get(key);
		} finally {
			lock.unlock();
		}
	}

	public V put(K key, V value) {
		try {
			lock.lock();
			return super.put(key, value);
		} finally {
			lock.unlock();
		}
	}

	@Override
	public V remove(Object key) {
		try {
			lock.lock();
			return super.remove(key);
		} finally {
			lock.unlock();
		}
	}

	@Override
	public boolean containsKey(Object key) {
		try {
			lock.lock();
			return super.containsKey(key);
		} finally {
			lock.unlock();
		}
	}

	@Override
	public void clear() {
		try {
			lock.lock();
			super.clear();
		} finally {
			lock.unlock();
		}
	}

	@Override
	public int size() {
		try {
			lock.lock();
			return super.size();
		} finally {
			lock.unlock();
		}
	}

	/**
	 * 获得maxCapacity
	 * @return the maxCapacity
	 */
	public int getMaxCapacity() {
		return maxCapacity;
	}

	/**
	 * 设置maxCapacity
	 * @param maxCapacity the maxCapacity to set
	 */
	public void setMaxCapacity(int maxCapacity) {
		this.maxCapacity = maxCapacity;
	}
}
public class Main {
	
	public static void main(String[] args) {
		LRUCache<String, String> lruCache = new LRUCache<String, String>(2);
		lruCache.put("1", "1");
		lruCache.put("2", "2");
		System.out.println(lruCache);
		lruCache.put("3", "3");
		System.out.println(lruCache);
	}
}

{1=1, 2=2}
{2=2, 3=3}
 

LruCache 源码解析 文章结构一、概述二、LruCache 的基本使用1. 初始化2. 读/写缓存3. LruCache 的其他方法createentryRemoved三、LruCache 的源码分析1. LruCache 的成员2. LruCache 的构造方法3. LruCache#put4. LruCache#get四、LruCache 的总结 一、概述 LruCache 是一种内存缓存算法,全称为 Least ... 阅读详情

相关推荐

LRUCache:NET的轻量级线程安全LRU缓存

LRUCache 它是什么? NET的轻量级线程安全LRU缓存 我怎么才能得到它? LRUCache可作为NuGet包提供: ://www.nuget.org/packages/LRUCache PM> Install-Package LRUCache 为什么做的? 我想要一个简单,轻量级的线程安全LRU缓存,但是找不到一个可以放在NuGet上任何地方的好缓存,所以我做了一个。 用法示例 var cache = new LRUCache < int>( capacity : 1000 ); var key = 1 ; var value = " Hello " ; cache . Add ( key , value ); string valueInCache ; cache . TryGetValue ( key , out valueInCache )

Android进阶之缓存LruCache的使用及源码解析

前言 在开发android程序过程中,利用缓存,能够更好的提升用户体验。也许大家没有自己写过缓存的控制,但是在我们日常使用的一些框架中都会用到缓存。例如Glide图片加载框架,这次我们从源码的角度看一下android缓存机制LruCaChe。 LRU(Least Recently Used) 最近最少使用 一、LruCache用法 我们这里说的LruCache是内存缓存,这篇文章我们不涉及磁盘缓存...

u010622801的博客 505

【NCBI】SRA toolkit安装及使用-Windows&Linux版本

由于市面上的文章介绍SRA toolkit基本上都是基于Linux,而在windows下运行SRA toolkit基本上可以达到相同的效果且更为方便,故本文将分别阐明在Windows和Linux环境下SRA toolkit的安装及使用。

weixin_48076899的博客 2万+

Lrucache源码深入分析

Lurcache源码深入分析 前言:本篇博客基于Lurcache源码分析安卓缓存实现原理,同时分析基于其内部实现的LinkedHashMap、Hash原理、Hash碰撞、如何解决Hash碰撞等问题。 目录 一、Lurcache源码深入分析 1.Lurcache概述: 2.使用方法: 3.源码分析: 4.LinkedHashMap的实现: 5.代码验证: 二、如何解决Hash冲突 三、DiskLruCache介绍 一、Lurcache概述: LRU (Least Recent...

居家小男的博客 453

从零上手SKILL脚本:在Virtuoso中实现版图绘制自动化

本文详细介绍了如何使用SKILL脚本在Virtuoso中实现版图绘制自动化,从基础操作到高级技巧全面覆盖。通过抓取操作日志、转换交互式函数为程序式函数,以及核心函数深度解析,帮助读者快速掌握SKILL脚本编程,大幅提升版图设计效率。文章还提供了实际工程应用案例和调试优化技巧,适合从零开始的初学者。

weixin_28742653的博客 764

Matlab实战:如何用MMG方程预测船舶轨迹(附完整代码)

本文提供了一份基于MMG方程的Matlab实战指南,详细讲解了如何从零构建船舶轨迹预测模型。内容涵盖MMG模型的核心原理、Matlab代码框架设计、动力学函数实现、参数调优与验证方法,并附有完整代码示例,帮助工程师和研究者快速掌握这一船舶操纵性预测的关键技术。

v6b7n8m9q0的博客 519

内存缓存LruCache详解

前言最近有用到LruCache,但是对其原理不太了解,所以看了源码,知道了一个大概,想总结一下!介绍现在大部分的缓存框架,比如图片加载框架,网络请求框架等都使用三级缓存来提高效率,即内存-文件(SD卡或手机)-网络。对于图片加载来说,就是加载图片的时候首先从内存缓存中取,如果没有再从文件缓存中取,如果文件缓存没有取到,就从网络下载图片并且加入内存和文件缓存。 LruCache是android提供的

苦逼的程序猿☺ 4154

OpenFOAM高效学习路线:如何用B站+东岳流体3个月掌握CFD仿真

本文分享了一套高效的OpenFOAM学习路线,结合B站视频、东岳流体教程和官方文档,帮助在职工程师在3个月内掌握CFD仿真技术。通过渐进式学习计划和案例训练,从基础到实战,快速提升独立建模能力。

weixin_29202213的博客 318

LRUCache原理及源码实现

LRU Cache(Least Recently Used Cache)是一种常见的缓存算法,用于在有限的缓存空间中存储最近使用的数据。LRU Cache的基本思想是,当缓存空间已满时,将最近最少使用的数据淘汰出去,以便为新的数据腾出空间。 LRU Cache的实现通常使用哈希表和双向链表结合的方式。哈希表用于快速查找数据,而双向链表用于维护数据的访问顺序。每当访问一个数据时,如果该数据已经存在于缓存中,则将其移动到链表的头部。希望对你有所帮助。

2301_80035594的博客 1636

FISCO BCOS平台的用户权限控制与分类管理

在区块链技术日益广泛应用的今天,如何管理与控制不同用户的权限,确保系统的安全性与高效性,成为了区块链平台不可忽视的一部分。FISCO BCOS作为一款高效的联盟链平台,通过细粒度的权限控制机制,提供了对不同用户权限的有效管理。本文将深入探讨FISCO BCOS如何实现用户的权限控制,并对不同用户进行分类与权限管理。FISCO BCOS平台通过精密的权限控制机制,不仅提供了对用户表和系统表的细粒度权限管理,还通过工具与接口为开发者和管理员提供了便捷的权限配置与查询功能。

2201_75798391的博客 1060

beegfs源码分析

BeeGFS的客户端是由一个内核模块和两个系统服务组成的,这里咱们主要分析内核模块。由于BeeGFS的目录树解析,是在父目录DEntry里找子目录或文件DEntry,逐级迭代完成的,所以在Mount文件系统时,须要从管理节点获取根元数据节点的ID,而后再向根元数据节点查询根目录的DEntry的信息,为后续的目录解析打下基础。获取类似/data/beeond/data/dentries/38/51/root/#fSiDs#/文件fileId的父路径。1.1 FileID的生成。Session网络消息。

wfzy的博客 1913

JavaDS —— LRUCache

介绍 LRUCache 数据结构,介绍 LinkedHashMap 并且使用Java 语言进行模拟实现。

熵减玩家 1218

高频仿真:高频天线设计_(4).天线参数分析与优化

通过上述步骤,我们展示了如何综合使用解析方法、数值优化方法和实验数据来设计和优化一个高效宽带天线。首先,我们通过解析方法确定了天线的初步长度;然后,使用遗传算法优化了天线的直径以最大化增益;最后,通过实验数据验证了天线的性能,包括驻波比和带宽。这一综合性方法可以有效地提升天线的设计和优化效果,确保其在实际应用中表现出色。

2401_87715305的博客 923

LruCache

LruCache基础知识 1、LruCache是计算机科学经常使用的一种近期最少使用算法 2、LruCache内部采用的是LinkedHashMap 3、LruCache的出现时为了取代SoftReference Android 3.0之前做图片缓存主要用的就是SoftReference,3.0以后虚拟机更倾向于用SoftReference来索引对象,所以LruCache的出现就是为了

weixin_40290793的博客 5597

Python爬虫实战:利用Requests-HTML与异步技术高效爬取B站视频信息及弹幕数据分析

B站的弹幕,远非简单的评论功能,它是一种独特的、实时互动的社交方式,是观众情感的集体宣泄和共鸣。无论是用于内容创作者优化视频结构,还是用于社会学、传播学的研究,亦或是简单的个人兴趣分析,都具备极高的价值。stop_words = {'的', '了', '是', '我', '你', '他', '她', '它', '在', '有', '不', '吗', '吧', '啊', '这', '那'}本文不仅是代码的堆砌,更注重原理的剖析、反爬策略的应对以及工程化的思考,旨在为读者提供一份紧跟技术前沿的实战指南。

2201_76125261的博客 390

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

什么是LRUCache 和 LRUCache 实现

1.什么是LRUCache ? Least-Recently-Used 替换掉最近最少使用的对象(如 redis缓存策略) 缓存剔除策略,当缓存空间不够用的时候需要一种方法剔除key 常用的有 LRU(从使用的时间下手把时间长剔除掉) , LFU(从使用次数下手把次数最少剔除掉)等 LRU通过使用一个循环双端队列不断把最新访问的 Key 放到表头,就是把最新访问的放到最前(右边),...

晓康的博客 2567

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android LRUCache原理

关于Android的三级缓存,其中主要的就是内存缓存和硬盘缓存。这两种缓存机制的实现都应用到了LruCache算法,今天我们就从使用到源码解析,来彻底理解Android中的缓存机制。 一、Android中的缓存策略 一般来说,缓存策略主要包含缓存的添加、获取和删除这三类操作。如何添加和获取缓存这个比较好理解,那么为什么还要删除缓存呢?这是因为不管是内存缓存还是硬盘缓存,它们的缓存大小都是有...

达帮主 2124

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Android源码解析——LruCache

我认为在写涉及到数据结构或算法的实现类的源码解析博客时,不应该急于讲它的使用或马上展开对源码的解析,而是要先交待一下这个数据结构或算法的资料,了解它的设计,再从它的设计出发去讲如何实现,最后从实现的角度来讲回源码,才能深入理解。这是最新读了一些博客之后的思考。对此问题如果你有其他见解,欢迎留言交流。 LRU在读LruCache源码之前,我们先来了解一下这里的Lru是什么。LRU全称为Least Re

一个码农的博客 1万+

Android LruCache 原理

Android LruCache 原理 LruCache是基于Least Recently Used(最近最少使用)算法实现的一个线程安全的数据缓存类,当超出设定的缓存容量时,优先淘汰最近最少使用的数据 LruCache的LRU缓存策略是利用LinkedHashMap来实现的,并通过封装get/put等相关方法来实现控制缓存大小以及淘汰元素,但不支持为null的key和value 因此先学习Lin...

提辖鲁的博客 1478

LruCache原理

1、原理 缓存保存了一个强引用(Android 2.3开始,垃圾回收器更倾向于回收弱引用和软引用,软引用和弱引用变得不可靠,Android 3.0中,图片的数据会存储在本地的内存当中,因而无法用一种可预见的方式将其释放)限制值的数量. 每当值被访问的时候,它会被移动到队列的头部. 当缓存已满的时候加入新的值时,队列中最后的值会出队,可能被回收 LRUCache内部维护主要是通过LinkedHa...

无问西东的博客 2921

LruCache缓存

Lru算法: Lru 指的是“Least Recently Used-近期最少使用算法”。 1、那么LruCache到底是什么呢? LruCache 是对限定数量的缓存对象持有强引用的缓存,每一次缓存对象被访问,都会被移动到队列的头部。当有对象要被添加到已经达到数量上限的 LruCache 中,队列尾部的对象将会被移除,而且可能会被垃圾回收器回收。LruCache 中的 Lru 指的是“Least...

xdy1120的博客 680

LruCache源码解析

前言最近项目要用到Picasso,所以就看了一下Picasso里面的源码,发现里面的内存缓存主要用的LruCache这个类,就去看了一下它的相关的东西,还是挺有收获的。正文我一般看类源码喜欢以构造方法作为突破口,然后从它暴露出来的我们使用的最多的那些方法切入,一点一点的把它捋清除,这次基本上也是这个思路。构造方法/**

lypeer的专栏 6728
上一篇: jprofiler安装图解
下一篇: Hessian入门
胸口碎大石_
博客等级 码龄17年 1154粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值