树叶云鸿蒙OS教程:鸿蒙OS LruBuffer

LruBuffer

java.lang.Object

|—ohos.utils.LruBuffer<K,V&

public class LruBuffer<K,V>
extends Object

一种缓存类,当容量不足以存储新值时,使用最近最少使用 (LRU) 算法删除最近最少访问的值。

您可以指定缓冲区的容量。当缓冲区中的键值对数量超过其预设容量时,LRU算法生效。具体来说,最近最少访问的键值对将被删除,以便为新的键值对腾出空间。您还可以重置缓冲区容量。如果新设置的缓冲区容量小于已存储的键值对的数量,则触发LRU算法删除最近最少访问的键值对。以下方法具有访问令牌:put(java.lang.Object,java.lang.Object), get(java.lang.Object), contains(java.lang.Object)。如果其中一个已被成功调用并且已经对一个值执行了实际操作,该值将被标记为最近访问的值,因此它在缓冲区满时的自动清除将被推迟。

该类的大部分方法都支持同步机制,因此可以在多线程或并发场景中使用。该类还提供了getMatchCount()、getMissCount()和getPutCount()方法,用于获取存储的key-value对的访问统计信息,包括匹配的查询key-value对的总数、不匹配的查询key-value对的总数、并添加了键值对。

另外,您可以重写该类中的afterRemoval(boolean,java.lang.Object,java.lang.Object,java.lang.Object)方法,在存储的键值对被删除或自动清除后进行后续操作。注意:缓冲区容量不能设置为0,key或value不能为null。

构造函数摘要

构造函数描述
LruBuffer()默认构造函数用于创建一个新的 LruBuffer 实例,默认容量为 64。
LruBuffer(int capacity)用于创建新 LruBuffer 实例的构造函数。

方法总结

修饰符和类型方法描述
protected voidafterRemoval(boolean isEvict, K key, V value, V newValue)删除值后执行后续操作。
intcapacity()获取当前缓冲区的容量。
voidclear()从当前缓冲区中清除键值对。
booleancontains(K key)检查当前缓冲区是否包含指定的键。
protected VcreateDefault(K key)如果未命中,则执行后续操作以计算特定键的值。
Vget(K key)获取与指定键关联的值。
intgetCreateCount()获取 createDefault(java.lang.Object) 返回值的次数。
intgetMatchCount()获取查询值匹配成功的次数。
intgetMissCount()获取查询值不匹配的次数。
intgetPutCount()获取将值添加到缓冲区的次数。
intgetRemovalCount()获取从缓冲区中逐出值的次数。
booleanisEmpty()检查当前缓冲区是否为空。
ListKkeys()获取当前缓冲区中值的键列表。
Vput(K key, V value)将键值对添加到缓冲区。
OptionalVremove(K key)从当前缓冲区中删除指定的键及其关联的值。
intsize()获取当前缓冲区中值的总数。
StringtoString()返回对象的字符串表示形式。
voidupdateCapacity(int newCapacity)将缓冲区容量更新为指定容量。
ListVvalues()获取当前缓冲区中所有值的列表。
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

构造函数详细信息

LruBuffer

public LruBuffer()

默认构造函数用于创建一个新的 LruBuffer 实例,默认容量为 64。

LruBuffer

public LruBuffer(int capacity)

用于创建新 LruBuffer 实例的构造函数。

参数:

参数名称参数描述
capacity指示为缓冲区自定义的容量。

Throws:

Throw名称Throw描述
IllegalArgumentException如果容量小于或等于 0,则引发此异常。

方法详情

afterRemoval

protected void afterRemoval(boolean isEvict, K key, V value, V newValue)

删除值后执行后续操作。

当使用 remove(java.lang.Object)、clear()、put(java.lang.Object,java.lang.Object) 或 updateCapacity(int) 方法时,会自动调用此方法。 您可以根据存储值的特性来决定是否覆盖该方法。

参数:

参数名称参数描述
isEvict因容量不足而调用该方法时参数值为真,其他情况下参数值为假。
key表示已删除的密钥。
value表示删除的值。
newValue如果调用了 put(java.lang.Object,java.lang.Object) 方法并且要添加的键已经存在,则参数值是关联的新值。 其他情况下参数值为空。

createDefault

protected V createDefault(K key)

如果未命中,则执行后续操作以计算特定键的值。

如果在 get(java.lang.Object) 错过计算键的值之后,会自动调用此方法。 您可以根据存储值的特性来决定是否覆盖该方法。

参数:

参数名称参数描述
key表示遗漏的键。

返回:

返回与键关联的值。

capacity

public final int capacity()

获取当前缓冲区的容量。

返回:

返回当前缓冲区的容量。

clear

public final void clear()

从当前缓冲区中清除键值对。 当键值对被清除后,调用 afterRemoval(boolean,java.lang.Object,java.lang.Object,java.lang.Object) 方法依次对其执行后续操作。

getMatchCount

public final int getMatchCount()

获取查询值匹配成功的次数。

返回:

返回查询值匹配成功的次数。

getMissCount

public final int getMissCount()

获取查询值不匹配的次数。

返回:

返回查询值不匹配的次数。

getPutCount

public final int getPutCount()

获取将值添加到缓冲区的次数。

返回:

返回将值添加到缓冲区的次数。

contains

public final boolean contains(K key)

检查当前缓冲区是否包含指定的键。

参数:

参数名称参数描述
key表示要检查的键。

返回:

如果缓冲区包含指定的键,则返回 true。

get

public final V get(K key)

获取与指定键关联的值。

参数:

参数名称参数描述
key表示要查询的键。

返回:

如果指定的键存在于缓冲区中,则返回与键关联的值; 否则返回 null。

getCreateCount

public final int getCreateCount()

获取 createDefault(java.lang.Object) 返回值的次数。

返回:

返回 createDefault(java.lang.Object) 返回值的次数。

isEmpty

public final boolean isEmpty()

检查当前缓冲区是否为空。

返回:

如果当前缓冲区不包含任何值,则返回 true。

keys

public final ListK keys()

获取当前缓冲区中值的键列表。

返回:

返回从最近访问到最近访问最少的键列表。

put

public final V put(K key, V value)

将键值对添加到缓冲区。

如果当前缓冲区已满,最近最少访问的键值对将被自动清除,为添加新的键值对腾出空间。 如果要添加的键已经存在于缓冲区中,则其关联的值将替换为要添加的值。

参数:

参数名称参数描述
key表示要添加的键。
value指示与要添加的键关联的值。

返回:

返回与添加的键关联的值; 如果要添加的键已经存在,则返回原始值。

Throws:

Throw名称Throw描述
NullPointerException如果 key 或 value 为 null,则引发此异常。

getRemovalCount

public final int getRemovalCount()

获取从缓冲区中逐出值的次数。

返回:

返回从缓冲区中逐出值的次数。

remove

public final OptionalV remove(K key)

从当前缓冲区中删除指定的键及其关联的值。

关联值删除后,会自动调用 afterRemoval(boolean,java.lang.Object,java.lang.Object,java.lang.Object) 方法对删除的值进行后续操作。

参数:

参数名称参数描述
key表示要删除的键。

返回:

返回一个包含已删除键值对的 Optional 对象; 如果键不存在,则返回一个空的 Optional 对象。

Throws:

Throw名称Throw描述
NullPointerException如果 key 为 null,则引发此异常。

size

public final int size()

获取当前缓冲区中值的总数。

返回:

返回当前缓冲区中值的总数。

toString

public String toString()

从类复制的描述:对象

返回对象的字符串表示形式。 通常,toString 方法返回一个“以文本方式表示”该对象的字符串。 结果应该是一个简洁但信息丰富的表示,易于人们阅读。 建议所有子类重写此方法。

Object 类的 toString 方法返回一个字符串,该字符串由对象作为其实例的类的名称、at 符号字符“@”和对象哈希码的无符号十六进制表示形式组成。 换句话说,此方法返回一个等于以下值的字符串:

 getClass().getName() + '@' + Integer.toHexString(hashCode()) 

覆盖:

类 Object 中的 toString

返回:

对象的字符串表示形式。

updateCapacity

public final void updateCapacity(int newCapacity)

将缓冲区容量更新为指定容量。

如果指定的容量小于缓冲区中存储的值的总数,则根据最近最少访问到最近访问的访问频率清除值,直到数量等于指定容量。

参数:

参数名称参数描述
newCapacity表示要设置的新容量。

Throws:

Throw名称Throw描述
IllegalArgumentException如果 newCapacity 小于或等于 0,则抛出此异常。

values

public final ListV values()

获取当前缓冲区中所有值的列表。

返回:

按升序返回当前缓冲区中所有值的列表,从最近访问到最近访问最少。

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/202083.html<

(0)
运维的头像运维
上一篇2025-04-06 01:40
下一篇 2025-04-06 01:42

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注