LinkedHashMap與LRUcache整理

歡迎訪問我的博客:http://wangnan.tech

LRU 緩存介紹

我們平時總會有一個電話本記錄所有朋友的電話苛白,但是在张,如果有朋友經(jīng)常聯(lián)系衩椒,那些朋友的電話號碼不用翻電話本我們也能記住,但是姿现,如果長時間沒有聯(lián)系了扼脐,要再次聯(lián)系那位朋友的時候岸军,我們又不得不求助電話本,但是瓦侮,通過電話本查找還是很費(fèi)時間的艰赞。但是,我們大腦能夠記住的東西是一定的肚吏,我們只能記住自己最熟悉的方妖,而長時間不熟悉的自然就忘記了

其實罚攀,計算機(jī)也用到了同樣的一個概念党觅,我們用緩存來存放以前讀取的數(shù)據(jù),而不是直接丟掉斋泄,這樣杯瞻,再次讀取的時候,可以直接在緩存里面取炫掐,而不用再重新查找一遍魁莉,這樣系統(tǒng)的反應(yīng)能力會有很大提高。但是募胃,當(dāng)我們讀取的個數(shù)特別大的時候旗唁,我們不可能把所有已經(jīng)讀取的數(shù)據(jù)都放在緩存里,畢竟內(nèi)存大小是一定的痹束,我們一般把最近常讀取的放在緩存里(相當(dāng)于我們把最近聯(lián)系的朋友的姓名和電話放在大腦里一樣)检疫。

LRU 緩存利用了這樣的一種思想。LRU 是 Least Recently Used 的縮寫参袱,翻譯過來就是“最近最少使用”,也就是說秽梅,LRU 緩存把最近最少使用的數(shù)據(jù)移除抹蚀,讓給最新讀取的數(shù)據(jù)。而往往最常讀取的企垦,也是讀取次數(shù)最多的环壤,所以,利用 LRU 緩存钞诡,我們能夠提高系統(tǒng)的 performance郑现。

實現(xiàn)

使用LinkedHashMap

好處:

  • 它本身已經(jīng)實現(xiàn)了按照訪問順序的存儲湃崩,也就是說,最近讀取的會放在最前面接箫,最最不常讀取的會放在最后(當(dāng)然攒读,它也可以實現(xiàn)按照插入順序存儲)。
  • LinkedHashMap 本身有一個方法用于判斷是否需要移除最不常讀取的數(shù)辛友,但是薄扁,原始方法默認(rèn)不需要移除,所以邓梅,我們需要 override 這樣一個方法,使得當(dāng)緩存里存放的數(shù)據(jù)個數(shù)超過規(guī)定個數(shù)后日缨,就把最不常用的移除掉。

代碼

public class LRUCache {
    private int capacity;
    private Map<Integer, Integer> cache;
    public LRUCache(int capacity) {
        this.capacity = capacity;
        this.cache = new java.util.LinkedHashMap<Integer, Integer> (capacity, 0.75f, true) {
            // 定義put后的移除規(guī)則匣距,大于容量就刪除eldest
            protected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) {
                return size() > capacity;
            }
        };
    }
    public int get(int key) {
        if (cache.containsKey(key)) {
            return cache.get(key);
        } else
            return -1;
    }
    public void set(int key, int value) {
        cache.put(key, value);
    }
}

參考:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市乙各,隨后出現(xiàn)的幾起案子墨礁,更是在濱河造成了極大的恐慌耳峦,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹲坷,死亡現(xiàn)場離奇詭異驶乾,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)循签,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門级乐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來县匠,“玉大人,你說我怎么就攤上這事乞旦。” “怎么了故痊?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵玖姑,是天一觀的道長愕秫。 經(jīng)常有香客問我,道長符喝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任洲劣,我火速辦了婚禮课蔬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘二跋。我一直安慰自己,他們只是感情好吞获,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布谚鄙。 她就那樣靜靜地躺著,像睡著了一般闷营。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上傻盟,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音规哲,去河邊找鬼。 笑死唉锌,一個胖子當(dāng)著我的面吹牛竿奏,可吹牛的內(nèi)容都是我干的袄简。 我是一名探鬼主播议双,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼平痰,長吁一口氣:“原來是場噩夢啊……” “哼汞舱!你這毒婦竟也來了宗雇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤泌神,失蹤者是張志新(化名)和其女友劉穎舞虱,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體矾兜,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年浑槽,在試婚紗的時候發(fā)現(xiàn)自己被綠了返帕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡镊靴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邑闲,到底是詐尸還是另有隱情梧油,我是刑警寧澤苫耸,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布褪子,位于F島的核電站,受9級特大地震影響嫌褪,放射性物質(zhì)發(fā)生泄漏胚股。R本人自食惡果不足惜笼痛,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一缨伊、第九天 我趴在偏房一處隱蔽的房頂上張望摘刑。 院中可真熱鬧刻坊,春花似錦、人聲如沸谭胚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旁趟。三九已至铜犬,卻和暖如春轻庆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背余爆。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工蛾方, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留像捶,地道東北人桩砰。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像硼莽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子懂鸵,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容