W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
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ù) | 描述 |
---|---|
LruBuffer() | 默認(rèn)構(gòu)造函數(shù)用于創(chuàng)建一個新的 LruBuffer 實例,默認(rèn)容量為 64。 |
LruBuffer(int capacity) | 用于創(chuàng)建新 LruBuffer 實例的構(gòu)造函數(shù)。 |
修飾符和類型 | 方法 | 描述 |
---|---|---|
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 |
public LruBuffer()
默認(rèn)構(gòu)造函數(shù)用于創(chuàng)建一個新的 LruBuffer 實例,默認(rèn)容量為 64。
public LruBuffer(int capacity)
用于創(chuàng)建新 LruBuffer 實例的構(gòu)造函數(shù)。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
capacity | 指示為緩沖區(qū)自定義的容量。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果容量小于或等于 0,則引發(fā)此異常。 |
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ù)值為空。 |
protected V createDefault(K key)
如果未命中,則執(zhí)行后續(xù)操作以計算特定鍵的值。
如果在 get(java.lang.Object) 錯過計算鍵的值之后,會自動調(diào)用此方法。 您可以根據(jù)存儲值的特性來決定是否覆蓋該方法。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
key | 表示遺漏的鍵。 |
返回:
返回與鍵關(guān)聯(lián)的值。
public final int capacity()
獲取當(dāng)前緩沖區(qū)的容量。
返回:
返回當(dāng)前緩沖區(qū)的容量。
public final void clear()
從當(dāng)前緩沖區(qū)中清除鍵值對。 當(dāng)鍵值對被清除后,調(diào)用 afterRemoval(boolean,java.lang.Object,java.lang.Object,java.lang.Object) 方法依次對其執(zhí)行后續(xù)操作。
public final int getMatchCount()
獲取查詢值匹配成功的次數(shù)。
返回:
返回查詢值匹配成功的次數(shù)。
public final int getMissCount()
獲取查詢值不匹配的次數(shù)。
返回:
返回查詢值不匹配的次數(shù)。
public final int getPutCount()
獲取將值添加到緩沖區(qū)的次數(shù)。
返回:
返回將值添加到緩沖區(qū)的次數(shù)。
public final boolean contains(K key)
檢查當(dāng)前緩沖區(qū)是否包含指定的鍵。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
key | 表示要檢查的鍵。 |
返回:
如果緩沖區(qū)包含指定的鍵,則返回 true。
public final V get(K key)
獲取與指定鍵關(guān)聯(lián)的值。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
key | 表示要查詢的鍵。 |
返回:
如果指定的鍵存在于緩沖區(qū)中,則返回與鍵關(guān)聯(lián)的值; 否則返回 null。
public final int getCreateCount()
獲取 createDefault(java.lang.Object) 返回值的次數(shù)。
返回:
返回 createDefault(java.lang.Object) 返回值的次數(shù)。
public final boolean isEmpty()
檢查當(dāng)前緩沖區(qū)是否為空。
返回:
如果當(dāng)前緩沖區(qū)不包含任何值,則返回 true。
public final ListK keys()
獲取當(dāng)前緩沖區(qū)中值的鍵列表。
返回:
返回從最近訪問到最近訪問最少的鍵列表。
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ā)此異常。 |
public final int getRemovalCount()
獲取從緩沖區(qū)中逐出值的次數(shù)。
返回:
返回從緩沖區(qū)中逐出值的次數(shù)。
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ā)此異常。 |
public final int size()
獲取當(dāng)前緩沖區(qū)中值的總數(shù)。
返回:
返回當(dāng)前緩沖區(qū)中值的總數(shù)。
public String toString()
從類復(fù)制的描述:對象
返回對象的字符串表示形式。 通常,toString 方法返回一個“以文本方式表示”該對象的字符串。 結(jié)果應(yīng)該是一個簡潔但信息豐富的表示,易于人們閱讀。 建議所有子類重寫此方法。
Object 類的 toString 方法返回一個字符串,該字符串由對象作為其實例的類的名稱、at 符號字符“@”和對象哈希碼的無符號十六進(jìn)制表示形式組成。 換句話說,此方法返回一個等于以下值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
覆蓋:
類 Object 中的 toString
返回:
對象的字符串表示形式。
public final void updateCapacity(int newCapacity)
將緩沖區(qū)容量更新為指定容量。
如果指定的容量小于緩沖區(qū)中存儲的值的總數(shù),則根據(jù)最近最少訪問到最近訪問的訪問頻率清除值,直到數(shù)量等于指定容量。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
newCapacity | 表示要設(shè)置的新容量。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果 newCapacity 小于或等于 0,則拋出此異常。 |
public final ListV values()
獲取當(dāng)前緩沖區(qū)中所有值的列表。
返回:
按升序返回當(dāng)前緩沖區(qū)中所有值的列表,從最近訪問到最近訪問最少。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: