首頁常見問題正文

Java中如何利用泛型寫一個LRU緩存?

更新時間:2023-10-10 來源:黑馬程序員 瀏覽量:

  在Java中,我們可以利用泛型來編寫一個LRU緩存。以下是一個簡單的示例:

import java.util.LinkedHashMap;
import java.util.Map;

public class LRUCache<K, V> extends LinkedHashMap<K, V> {
    private final int MAX_SIZE;

    public LRUCache(int maxSize) {
        // 設(shè)置最大緩存大小
        super(maxSize + 1, 1.0f, true);
        MAX_SIZE = maxSize;
    }

    @Override
    protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
        return size() > MAX_SIZE;
    }

    public static void main(String[] args) {
        LRUCache<Integer, String> lruCache = new LRUCache<>(3);
        lruCache.put(1, "one");
        lruCache.put(2, "two");
        lruCache.put(3, "three");
        System.out.println(lruCache.get(1)); // 輸出: one
        lruCache.put(4, "four"); // 此時緩存中存在1, 2, 4,3被刪除
        System.out.println(lruCache.get(3)); // 輸出: null,因?yàn)?已經(jīng)被刪除
    }
}

  在這個示例中,我們擴(kuò)展了Java的LinkedHashMap類,并重寫了removeEldestEntry方法。當(dāng)緩存的大小超過我們設(shè)定的最大值時,這個方法會返回true,從而刪除最舊的元素。這樣,我們就實(shí)現(xiàn)了一個LRU緩存。

分享到:
在線咨詢 我要報名
和我們在線交談!