W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
java.lang.Object
|---ohos.utils.LruBuffer<K,V&
public class LruBuffer<K,V>
extends Object
一種緩存類,當(dāng)容量不足以存儲(chǔ)新值時(shí),使用最近最少使用 (LRU) 算法刪除最近最少訪問(wèn)的值。
您可以指定緩沖區(qū)的容量。當(dāng)緩沖區(qū)中的鍵值對(duì)數(shù)量超過(guò)其預(yù)設(shè)容量時(shí),LRU算法生效。具體來(lái)說(shuō),最近最少訪問(wèn)的鍵值對(duì)將被刪除,以便為新的鍵值對(duì)騰出空間。您還可以重置緩沖區(qū)容量。如果新設(shè)置的緩沖區(qū)容量小于已存儲(chǔ)的鍵值對(duì)的數(shù)量,則觸發(fā)LRU算法刪除最近最少訪問(wèn)的鍵值對(duì)。以下方法具有訪問(wèn)令牌:put(java.lang.Object,java.lang.Object), get(java.lang.Object), contains(java.lang.Object)。如果其中一個(gè)已被成功調(diào)用并且已經(jīng)對(duì)一個(gè)值執(zhí)行了實(shí)際操作,該值將被標(biāo)記為最近訪問(wèn)的值,因此它在緩沖區(qū)滿時(shí)的自動(dòng)清除將被推遲。
該類的大部分方法都支持同步機(jī)制,因此可以在多線程或并發(fā)場(chǎng)景中使用。該類還提供了getMatchCount()、getMissCount()和getPutCount()方法,用于獲取存儲(chǔ)的key-value對(duì)的訪問(wèn)統(tǒng)計(jì)信息,包括匹配的查詢key-value對(duì)的總數(shù)、不匹配的查詢key-value對(duì)的總數(shù)、并添加了鍵值對(duì)。
另外,您可以重寫(xiě)該類中的afterRemoval(boolean,java.lang.Object,java.lang.Object,java.lang.Object)方法,在存儲(chǔ)的鍵值對(duì)被刪除或自動(dòng)清除后進(jìn)行后續(xù)操作。注意:緩沖區(qū)容量不能設(shè)置為0,key或value不能為null。
構(gòu)造函數(shù) | 描述 |
---|---|
LruBuffer() | 默認(rèn)構(gòu)造函數(shù)用于創(chuàng)建一個(gè)新的 LruBuffer 實(shí)例,默認(rèn)容量為 64。 |
LruBuffer(int capacity) | 用于創(chuàng)建新 LruBuffer 實(shí)例的構(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ū)中清除鍵值對(duì)。 |
boolean | contains(K key) | 檢查當(dāng)前緩沖區(qū)是否包含指定的鍵。 |
protected V | createDefault(K key) | 如果未命中,則執(zhí)行后續(xù)操作以計(jì)算特定鍵的值。 |
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) | 將鍵值對(duì)添加到緩沖區(qū)。 |
OptionalV | remove(K key) | 從當(dāng)前緩沖區(qū)中刪除指定的鍵及其關(guān)聯(lián)的值。 |
int | size() | 獲取當(dāng)前緩沖區(qū)中值的總數(shù)。 |
String | toString() | 返回對(duì)象的字符串表示形式。 |
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)建一個(gè)新的 LruBuffer 實(shí)例,默認(rèn)容量為 64。
public LruBuffer(int capacity)
用于創(chuàng)建新 LruBuffer 實(shí)例的構(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) 方法時(shí),會(huì)自動(dòng)調(diào)用此方法。 您可以根據(jù)存儲(chǔ)值的特性來(lái)決定是否覆蓋該方法。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
isEvict | 因容量不足而調(diào)用該方法時(shí)參數(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ù)操作以計(jì)算特定鍵的值。
如果在 get(java.lang.Object) 錯(cuò)過(guò)計(jì)算鍵的值之后,會(huì)自動(dòng)調(diào)用此方法。 您可以根據(jù)存儲(chǔ)值的特性來(lái)決定是否覆蓋該方法。
參數(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ū)中清除鍵值對(duì)。 當(dāng)鍵值對(duì)被清除后,調(diào)用 afterRemoval(boolean,java.lang.Object,java.lang.Object,java.lang.Object) 方法依次對(duì)其執(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ū)中值的鍵列表。
返回:
返回從最近訪問(wèn)到最近訪問(wèn)最少的鍵列表。
public final V put(K key, V value)
將鍵值對(duì)添加到緩沖區(qū)。
如果當(dāng)前緩沖區(qū)已滿,最近最少訪問(wèn)的鍵值對(duì)將被自動(dòng)清除,為添加新的鍵值對(duì)騰出空間。 如果要添加的鍵已經(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)值刪除后,會(huì)自動(dòng)調(diào)用 afterRemoval(boolean,java.lang.Object,java.lang.Object,java.lang.Object) 方法對(duì)刪除的值進(jìn)行后續(xù)操作。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
key | 表示要?jiǎng)h除的鍵。 |
返回:
返回一個(gè)包含已刪除鍵值對(duì)的 Optional 對(duì)象; 如果鍵不存在,則返回一個(gè)空的 Optional 對(duì)象。
Throws:
Throw名稱 | Throw描述 |
---|---|
NullPointerException | 如果 key 為 null,則引發(fā)此異常。 |
public final int size()
獲取當(dāng)前緩沖區(qū)中值的總數(shù)。
返回:
返回當(dāng)前緩沖區(qū)中值的總數(shù)。
public String toString()
從類復(fù)制的描述:對(duì)象
返回對(duì)象的字符串表示形式。 通常,toString 方法返回一個(gè)“以文本方式表示”該對(duì)象的字符串。 結(jié)果應(yīng)該是一個(gè)簡(jiǎn)潔但信息豐富的表示,易于人們閱讀。 建議所有子類重寫(xiě)此方法。
Object 類的 toString 方法返回一個(gè)字符串,該字符串由對(duì)象作為其實(shí)例的類的名稱、at 符號(hào)字符“@”和對(duì)象哈希碼的無(wú)符號(hào)十六進(jìn)制表示形式組成。 換句話說(shuō),此方法返回一個(gè)等于以下值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
覆蓋:
類 Object 中的 toString
返回:
對(duì)象的字符串表示形式。
public final void updateCapacity(int newCapacity)
將緩沖區(qū)容量更新為指定容量。
如果指定的容量小于緩沖區(qū)中存儲(chǔ)的值的總數(shù),則根據(jù)最近最少訪問(wèn)到最近訪問(wèn)的訪問(wèn)頻率清除值,直到數(shù)量等于指定容量。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
newCapacity | 表示要設(shè)置的新容量。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果 newCapacity 小于或等于 0,則拋出此異常。 |
public final ListV values()
獲取當(dāng)前緩沖區(qū)中所有值的列表。
返回:
按升序返回當(dāng)前緩沖區(qū)中所有值的列表,從最近訪問(wèn)到最近訪問(wèn)最少。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: