java 最少使用(lru)置换算法_LRU算法详解及最简单的Java实现
生活随笔
收集整理的這篇文章主要介紹了
java 最少使用(lru)置换算法_LRU算法详解及最简单的Java实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
更多內容,歡迎關注微信公眾號:全菜工程師小輝~
LRU(Least recently used,最近最少使用)算法根據數據的歷史訪問記錄來進行淘汰數據,其核心思想是“如果數據最近被訪問過,那么將來被訪問的幾率也更高”。
LRU算法的表現
實現LRU的方法
比較三種方法優劣:
對于第一種方法,需要不停地維護數據項的訪問時間戳,另外,在插入數據、刪除數據以及訪問數據時,時間復雜度都是O(n)。對于第二種方法,鏈表在定位數據的時候時間復雜度為O(n)。所以在一般使用第三種方式來是實現LRU算法。
LinkedHashMap的實現方案
LinkedHashMap繼承于HashMap,來一張LinkedHashMap的結構圖
LinkedHashMap的結構圖
其中next是用于維護HashMap指定table位置上連接的Entry的順序的,before、after是用于維護Entry插入的先后順序的
LinkedHashMap底層就是用的HashMap加雙鏈表實現的。實現LRU算法主要有兩個注意的地方:
所以使用LinkedHashMap很簡單的實現了LRU算法,代碼如下。另外如果生產中使用的話,一定要記得線程安全加鎖。
class LRULinkedHashMap extends LinkedHashMap { // 定義緩存的容量 private int capacity; // 帶參數的構造器 LRULinkedHashMap(int capacity){ // 第三個參數為accessOrder super(16,0.75f,true); // 傳入指定的緩存最大容量 this.capacity=capacity; } // 實現LRU的關鍵方法,如果map里面的元素個數大于了緩存最大容量,則刪除鏈表的頂端元素 @Override public boolean removeEldestEntry(Map.Entry eldest){ return size()>capacity; } }更多內容,歡迎關注微信公眾號:全菜工程師小輝~
總結
以上是生活随笔為你收集整理的java 最少使用(lru)置换算法_LRU算法详解及最简单的Java实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 长江七号演员 长江七号剧情简介
- 下一篇: qq消息不在屏幕上弹出