LRU演算法java資料結構實現

來源:互聯網
上載者:User

LRU:(least recently used) 最近最少使用演算法。LRU演算法的java中資料結構的實現是一個LRU演算法在面試中經常被問到的問題,我們可以用LinkedList來表示最近和最少使用。將訪問過的資料用LinkedList資料結構進行儲存,如果尋找最少使用,直接返回LinkedList的尾節點即可。如果添加一個最近訪問的資料a,可以將a從鏈表中的位置刪除,移到鏈表的頭部。

但是鏈表中查詢資料DATA的位置一般訪問速度慢,所以需要藉助其它資料結構來完成尋找,我們知道HashMap是一個高效的查詢資料結構。如果我們將該資料DATA作為鍵,DATA對應的節點作為值,儲存在HashMap中,那麼,我們可以得到查詢複雜度為O(1)的操作。

JAVA中已經協助我們實現了一個這樣的資料結構,LinkedHashMap.LinkedHashMap存放的索引值對和存放時的位置一致。不會變化,可以設定LinkedHashMap按照插入的順序排序,也可以按照訪問的順序排序,最先訪問的放置在最後面,最近訪問的在最前面。

LinkedHashMap自身已經實現了順序儲存,預設情況下是按照元素的添加順序儲存,也可以啟用按照訪問順序儲存,即最近讀取的資料放在最前面,最早讀取的資料放在最後面,然後它還有一個判斷是否刪除最老資料的方法,預設是返回false,即不刪除資料,我們使用LinkedHashMap實現LRU緩衝的方法就是對LinkedHashMap實現簡單的擴充,下面是簡單實現。 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 );  //true設定按照訪問順序排序      this .cacheSize = cacheSize;    }      protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {      return size() >= cacheSize;  //如果LinkedHashMap的大小超過緩衝值,返回true刪除最早的資料    } }


         

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.