首頁(yè)常見(jiàn)問(wèn)題正文

Java中如何利用泛型寫一個(gè)LRU緩存?

更新時(shí)間:2023-10-10 來(lái)源:黑馬程序員 瀏覽量:

  在Java中,我們可以利用泛型來(lái)編寫一個(gè)LRU緩存。以下是一個(gè)簡(jiǎn)單的示例:

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"); // 此時(shí)緩存中存在1, 2, 4,3被刪除
        System.out.println(lruCache.get(3)); // 輸出: null,因?yàn)?已經(jīng)被刪除
    }
}

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

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!