溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何用Java代碼實現(xiàn)最近最少使用緩存

發(fā)布時間:2021-11-24 13:58:36 來源:億速云 閱讀:123 作者:柒染 欄目:編程語言

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何用Java代碼實現(xiàn)最近最少使用緩存,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

怎么實現(xiàn)一個最近最少使用(LRU)的緩存。緩存可以通過哈希表來實現(xiàn),然而為這個緩存增加大小限制會變成另一個有意思的問題?,F(xiàn)在我們看一下怎么實現(xiàn)。

最近最少使用緩存的回收

為了實現(xiàn)緩存回收,我們需要很容易做到:

  • 查詢出最近最晚使用的項

  • 給最近使用的項做一個標(biāo)記

鏈表可以實現(xiàn)這兩個操作。檢測最近最少使用的項只需要返回鏈表的尾部。標(biāo)記一項為最近使用的項只需要從當(dāng)前位置移除,然后將該項放置到頭部。比較困難的事情是怎么快速的在鏈表中找到該項。

哈希表的幫助

看一下我們工具箱中的數(shù)據(jù)結(jié)構(gòu),哈希表可以在(消耗)常量的時間內(nèi)索引到某個對象。如果我們創(chuàng)建一個形如key->鏈表節(jié)點的哈希表,我們就能夠在常量時間內(nèi)找到最近使用的節(jié)點。更甚的是,我們也能夠在常量時間內(nèi)判斷節(jié)點的是否存在(或不存在);

找到這個節(jié)點后,我們就能將這個節(jié)點移動到鏈表的最前端,標(biāo)記為最近使用的項了。

Java的捷徑

據(jù)我所知,很少有一種編程語言的標(biāo)準(zhǔn)庫中有通用的數(shù)據(jù)結(jié)構(gòu)能提供上述功能的。這是一種混合的數(shù)據(jù)結(jié)構(gòu),我們需要在哈希表的基礎(chǔ)上建立一個鏈表。但是 Java已經(jīng)為我們提供了這種形式的數(shù)據(jù)結(jié)構(gòu)-LinkedHashMap!它甚至提供可覆蓋回收策略的方法。需要我們注意的事情是,改鏈表的順序是插入的順序,而不是訪問的順序。但是,有一個構(gòu)造函數(shù)提供了一個選項,可以使用訪問的順序(見文檔)。

無需多說:

import java.util.LinkedHashMap; import java.util.Map;  public LRUCache<K, V> extends LinkedHashMap<K, V> {   private int cacheSize;    public LRUCache(int cacheSize) {     super(16, 0.75, true);     this.cacheSize = cacheSize;   }    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {     return size() >= cacheSize;   } }

上述就是小編為大家分享的如何用Java代碼實現(xiàn)最近最少使用緩存了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI