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-ի համար: