Simple implementation for LRUCache (16.25) #2.

master
Tomasz Polgrabia 2025-01-03 20:23:41 +01:00
parent 9edde0b72e
commit 50cc9b8f5b
2 changed files with 19 additions and 15 deletions

View File

@ -1,9 +1,9 @@
import java.util.*;
public class LruCache<K,V> implements Map<K,V> {
private Map<K,V> map;
private PriorityQueue<Object> priorityQueue;
private Map<Object,Integer> counts;
private final Map<K,V> map;
private final PriorityQueue<K> priorityQueue;
private final Map<K,Integer> counts;
private final int maxSize;
public LruCache(int maxSize) {
@ -34,9 +34,9 @@ public class LruCache<K,V> implements Map<K,V> {
@Override
public V get(Object key) {
counts.put(key, counts.getOrDefault(key, 0) + 1);
counts.put((K) key, counts.getOrDefault(key, 0) + 1);
priorityQueue.remove(key);
priorityQueue.add(key);
priorityQueue.add((K) key);
return map.get(key);
}

View File

@ -1,20 +1,24 @@
import java.io.PrintStream;
public class Program {
public static void main(String[] args) {
testLruCache(System.out);
}
private static void testLruCache(PrintStream ps) {
var lruCache = new LruCache<>(2);
lruCache.put(1, "one");
lruCache.put(2, "two");
System.out.println("Element: " + lruCache.get(1));
System.out.println("Element: " + lruCache.get(1));
System.out.println("Element: " + lruCache.get(1));
ps.println("Element: " + lruCache.get(1));
ps.println("Element: " + lruCache.get(1));
ps.println("Element: " + lruCache.get(1));
lruCache.put(3, "three");
System.out.println("Element: " + lruCache.get(2));
ps.println("Element: " + lruCache.get(2));
lruCache.put(4, "four");
System.out.println("Element: " + lruCache.get(4));
System.out.println("Element: " + lruCache.get(3));
System.out.println("Element: " + lruCache.get(2));
System.out.println("Element: " + lruCache.get(1));
ps.println("Element: " + lruCache.get(4));
ps.println("Element: " + lruCache.get(3));
ps.println("Element: " + lruCache.get(2));
ps.println("Element: " + lruCache.get(1));
}
}