鸿蒙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 void | afterRemoval(boolean isEvict, K key, V value, V newValue) | 删除值后执行后续操作。 |
int | capacity() | 获取当前缓冲区的容量。 |
void | clear() | 从当前缓冲区中清除键值对。 |
boolean | contains(K key) | 检查当前缓冲区是否包含指定的键。 |
protected V | createDefault(K key) | 如果未命中,则执行后续操作以计算特定键的值。 |
V | get(K key) | 获取与指定键关联的值。 |
int | getCreateCount() | 获取 createDefault(java.lang.Object) 返回值的次数。 |
int | getMatchCount() | 获取查询值匹配成功的次数。 |
int | getMissCount() | 获取查询值不匹配的次数。 |
int | getPutCount() | 获取将值添加到缓冲区的次数。 |
int | getRemovalCount() | 获取从缓冲区中逐出值的次数。 |
boolean | isEmpty() | 检查当前缓冲区是否为空。 |
ListK | keys() | 获取当前缓冲区中值的键列表。 |
V | put(K key, V value) | 将键值对添加到缓冲区。 |
OptionalV | remove(K key) | 从当前缓冲区中删除指定的键及其关联的值。 |
int | size() | 获取当前缓冲区中值的总数。 |
String | toString() | 返回对象的字符串表示形式。 |
void | updateCapacity(int newCapacity) | 将缓冲区容量更新为指定容量。 |
ListV | values() | 获取当前缓冲区中所有值的列表。 |
从类 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()
获取当前缓冲区中所有值的列表。
返回:
按升序返回当前缓冲区中所有值的列表,从最近访问到最近访问最少。
更多建议: