鴻蒙OS LruBuffer

2022-08-26 11:22 更新

LruBuffer

java.lang.Object

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

public class LruBuffer<K,V>
extends Object

一種緩存類,當(dāng)容量不足以存儲新值時,使用最近最少使用 (LRU) 算法刪除最近最少訪問的值。

您可以指定緩沖區(qū)的容量。當(dāng)緩沖區(qū)中的鍵值對數(shù)量超過其預(yù)設(shè)容量時,LRU算法生效。具體來說,最近最少訪問的鍵值對將被刪除,以便為新的鍵值對騰出空間。您還可以重置緩沖區(qū)容量。如果新設(shè)置的緩沖區(qū)容量小于已存儲的鍵值對的數(shù)量,則觸發(fā)LRU算法刪除最近最少訪問的鍵值對。以下方法具有訪問令牌:put(java.lang.Object,java.lang.Object), get(java.lang.Object), contains(java.lang.Object)。如果其中一個已被成功調(diào)用并且已經(jīng)對一個值執(zhí)行了實際操作,該值將被標(biāo)記為最近訪問的值,因此它在緩沖區(qū)滿時的自動清除將被推遲。

該類的大部分方法都支持同步機制,因此可以在多線程或并發(fā)場景中使用。該類還提供了getMatchCount()、getMissCount()和getPutCount()方法,用于獲取存儲的key-value對的訪問統(tǒng)計信息,包括匹配的查詢key-value對的總數(shù)、不匹配的查詢key-value對的總數(shù)、并添加了鍵值對。

另外,您可以重寫該類中的afterRemoval(boolean,java.lang.Object,java.lang.Object,java.lang.Object)方法,在存儲的鍵值對被刪除或自動清除后進(jìn)行后續(xù)操作。注意:緩沖區(qū)容量不能設(shè)置為0,key或value不能為null。

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
LruBuffer() 默認(rèn)構(gòu)造函數(shù)用于創(chuàng)建一個新的 LruBuffer 實例,默認(rèn)容量為 64。
LruBuffer(int capacity) 用于創(chuàng)建新 LruBuffer 實例的構(gòu)造函數(shù)。

方法總結(jié)

修飾符和類型 方法 描述
protected void afterRemoval(boolean isEvict, K key, V value, V newValue) 刪除值后執(zhí)行后續(xù)操作。
int capacity() 獲取當(dāng)前緩沖區(qū)的容量。
void clear() 從當(dāng)前緩沖區(qū)中清除鍵值對。
boolean contains(K key) 檢查當(dāng)前緩沖區(qū)是否包含指定的鍵。
protected V createDefault(K key) 如果未命中,則執(zhí)行后續(xù)操作以計算特定鍵的值。
V get(K key) 獲取與指定鍵關(guān)聯(lián)的值。
int getCreateCount() 獲取 createDefault(java.lang.Object) 返回值的次數(shù)。
int getMatchCount() 獲取查詢值匹配成功的次數(shù)。
int getMissCount() 獲取查詢值不匹配的次數(shù)。
int getPutCount() 獲取將值添加到緩沖區(qū)的次數(shù)。
int getRemovalCount() 獲取從緩沖區(qū)中逐出值的次數(shù)。
boolean isEmpty() 檢查當(dāng)前緩沖區(qū)是否為空。
ListK keys() 獲取當(dāng)前緩沖區(qū)中值的鍵列表。
V put(K key, V value) 將鍵值對添加到緩沖區(qū)。
OptionalV remove(K key) 從當(dāng)前緩沖區(qū)中刪除指定的鍵及其關(guān)聯(lián)的值。
int size() 獲取當(dāng)前緩沖區(qū)中值的總數(shù)。
String toString() 返回對象的字符串表示形式。
void updateCapacity(int newCapacity) 將緩沖區(qū)容量更新為指定容量。
ListV values() 獲取當(dāng)前緩沖區(qū)中所有值的列表。
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

構(gòu)造函數(shù)詳細(xì)信息

LruBuffer

public LruBuffer()

默認(rèn)構(gòu)造函數(shù)用于創(chuàng)建一個新的 LruBuffer 實例,默認(rèn)容量為 64。

LruBuffer

public LruBuffer(int capacity)

用于創(chuàng)建新 LruBuffer 實例的構(gòu)造函數(shù)。

參數(shù):

參數(shù)名稱 參數(shù)描述
capacity 指示為緩沖區(qū)自定義的容量。

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果容量小于或等于 0,則引發(fā)此異常。

方法詳情

afterRemoval

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

刪除值后執(zhí)行后續(xù)操作。

當(dāng)使用 remove(java.lang.Object)、clear()、put(java.lang.Object,java.lang.Object) 或 updateCapacity(int) 方法時,會自動調(diào)用此方法。 您可以根據(jù)存儲值的特性來決定是否覆蓋該方法。

參數(shù):

參數(shù)名稱 參數(shù)描述
isEvict 因容量不足而調(diào)用該方法時參數(shù)值為真,其他情況下參數(shù)值為假。
key 表示已刪除的密鑰。
value 表示刪除的值。
newValue 如果調(diào)用了 put(java.lang.Object,java.lang.Object) 方法并且要添加的鍵已經(jīng)存在,則參數(shù)值是關(guān)聯(lián)的新值。 其他情況下參數(shù)值為空。

createDefault

protected V createDefault(K key)

如果未命中,則執(zhí)行后續(xù)操作以計算特定鍵的值。

如果在 get(java.lang.Object) 錯過計算鍵的值之后,會自動調(diào)用此方法。 您可以根據(jù)存儲值的特性來決定是否覆蓋該方法。

參數(shù):

參數(shù)名稱 參數(shù)描述
key 表示遺漏的鍵。

返回:

返回與鍵關(guān)聯(lián)的值。

capacity

public final int capacity()

獲取當(dāng)前緩沖區(qū)的容量。

返回:

返回當(dāng)前緩沖區(qū)的容量。

clear

public final void clear()

從當(dāng)前緩沖區(qū)中清除鍵值對。 當(dāng)鍵值對被清除后,調(diào)用 afterRemoval(boolean,java.lang.Object,java.lang.Object,java.lang.Object) 方法依次對其執(zhí)行后續(xù)操作。

getMatchCount

public final int getMatchCount()

獲取查詢值匹配成功的次數(shù)。

返回:

返回查詢值匹配成功的次數(shù)。

getMissCount

public final int getMissCount()

獲取查詢值不匹配的次數(shù)。

返回:

返回查詢值不匹配的次數(shù)。

getPutCount

public final int getPutCount()

獲取將值添加到緩沖區(qū)的次數(shù)。

返回:

返回將值添加到緩沖區(qū)的次數(shù)。

contains

public final boolean contains(K key)

檢查當(dāng)前緩沖區(qū)是否包含指定的鍵。

參數(shù):

參數(shù)名稱 參數(shù)描述
key 表示要檢查的鍵。

返回:

如果緩沖區(qū)包含指定的鍵,則返回 true。

get

public final V get(K key)

獲取與指定鍵關(guān)聯(lián)的值。

參數(shù):

參數(shù)名稱 參數(shù)描述
key 表示要查詢的鍵。

返回:

如果指定的鍵存在于緩沖區(qū)中,則返回與鍵關(guān)聯(lián)的值; 否則返回 null。

getCreateCount

public final int getCreateCount()

獲取 createDefault(java.lang.Object) 返回值的次數(shù)。

返回:

返回 createDefault(java.lang.Object) 返回值的次數(shù)。

isEmpty

public final boolean isEmpty()

檢查當(dāng)前緩沖區(qū)是否為空。

返回:

如果當(dāng)前緩沖區(qū)不包含任何值,則返回 true。

keys

public final ListK keys()

獲取當(dāng)前緩沖區(qū)中值的鍵列表。

返回:

返回從最近訪問到最近訪問最少的鍵列表。

put

public final V put(K key, V value)

將鍵值對添加到緩沖區(qū)。

如果當(dāng)前緩沖區(qū)已滿,最近最少訪問的鍵值對將被自動清除,為添加新的鍵值對騰出空間。 如果要添加的鍵已經(jīng)存在于緩沖區(qū)中,則其關(guān)聯(lián)的值將替換為要添加的值。

參數(shù):

參數(shù)名稱 參數(shù)描述
key 表示要添加的鍵。
value 指示與要添加的鍵關(guān)聯(lián)的值。

返回:

返回與添加的鍵關(guān)聯(lián)的值; 如果要添加的鍵已經(jīng)存在,則返回原始值。

Throws:

Throw名稱 Throw描述
NullPointerException 如果 key 或 value 為 null,則引發(fā)此異常。

getRemovalCount

public final int getRemovalCount()

獲取從緩沖區(qū)中逐出值的次數(shù)。

返回:

返回從緩沖區(qū)中逐出值的次數(shù)。

remove

public final OptionalV remove(K key)

從當(dāng)前緩沖區(qū)中刪除指定的鍵及其關(guān)聯(lián)的值。

關(guān)聯(lián)值刪除后,會自動調(diào)用 afterRemoval(boolean,java.lang.Object,java.lang.Object,java.lang.Object) 方法對刪除的值進(jìn)行后續(xù)操作。

參數(shù):

參數(shù)名稱 參數(shù)描述
key 表示要刪除的鍵。

返回:

返回一個包含已刪除鍵值對的 Optional 對象; 如果鍵不存在,則返回一個空的 Optional 對象。

Throws:

Throw名稱 Throw描述
NullPointerException 如果 key 為 null,則引發(fā)此異常。

size

public final int size()

獲取當(dāng)前緩沖區(qū)中值的總數(shù)。

返回:

返回當(dāng)前緩沖區(qū)中值的總數(shù)。

toString

public String toString()

從類復(fù)制的描述:對象

返回對象的字符串表示形式。 通常,toString 方法返回一個“以文本方式表示”該對象的字符串。 結(jié)果應(yīng)該是一個簡潔但信息豐富的表示,易于人們閱讀。 建議所有子類重寫此方法。

Object 類的 toString 方法返回一個字符串,該字符串由對象作為其實例的類的名稱、at 符號字符“@”和對象哈希碼的無符號十六進(jìn)制表示形式組成。 換句話說,此方法返回一個等于以下值的字符串:

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

覆蓋:

類 Object 中的 toString

返回:

對象的字符串表示形式。

updateCapacity

public final void updateCapacity(int newCapacity)

將緩沖區(qū)容量更新為指定容量。

如果指定的容量小于緩沖區(qū)中存儲的值的總數(shù),則根據(jù)最近最少訪問到最近訪問的訪問頻率清除值,直到數(shù)量等于指定容量。

參數(shù):

參數(shù)名稱 參數(shù)描述
newCapacity 表示要設(shè)置的新容量。

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果 newCapacity 小于或等于 0,則拋出此異常。

values

public final ListV values()

獲取當(dāng)前緩沖區(qū)中所有值的列表。

返回:

按升序返回當(dāng)前緩沖區(qū)中所有值的列表,從最近訪問到最近訪問最少。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號