Sobes.tech
Senior

Կատարեք LRU կեշ՝ հնացած արժեքների արտաքսմամբ (հիմնական իրականացում)

sobes.tech AI

Պատասխան AI-ից

Java-ում LRU cache-ը իրականացնելու համար հաճախ օգտագործվում է LinkedHashMap-ի համադրությունը, որի մեջ վերագրում է removeEldestEntry մեթոդը, որը ավտոմատ կերպով հեռացնում է ամենահին տարրերը սահմանաչափը անցնելու դեպքում:

Java-ում հիմնական LRU cache-ի իրականացումը օրինակ:

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

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

    public LRUCache(int capacity) {
        super(capacity, 0.75f, true); // true՝ հասանելիության կարգը
        this.capacity = capacity;
    }

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

    public static void main(String[] args) {
        LRUCache<Integer, String> cache = new LRUCache<>(3);
        cache.put(1, "one");
        cache.put(2, "two");
        cache.put(3, "three");
        cache.get(1); // մուտք գործել տարր 1՝ կարգը թարմացնելու համար
        cache.put(4, "four"); // կհեռացնի տարր 2

        System.out.println(cache.keySet()); // Ցուցադրում է [3, 1, 4]
    }
}

Այս օրինակով՝

  • LinkedHashMap-ը, որի պարամետրը accessOrder=true, պահպանում է տարրերը վերջին մուտքի կարգով:
  • removeEldestEntry մեթոդը ավտոմատ կերպով հեռացնում է ամենահին տարրերը չափը գերազանցելու դեպքում:
  • get կանչը դարձնում է տարրն "նոր" ըստ մուտքի կարգի:

Սա պարզ և արդյունավետ լուծում է Java-ում LRU cache-ի համար: