Eduardosfgg / new-project

0 stars 0 forks source link

hw #48

Open Eduardosfgg opened 8 months ago

Eduardosfgg commented 8 months ago

import java.util.LinkedHashMap; import java.util.Map; import java.util.logging.Logger;

public class LRUCache<K, V> extends LinkedHashMap<K, V> implements Iterable { private static final Logger LOGGER = Logger.getLogger(LRUCache.class.getName()); private final int maxSize;

public LRUCache(int maxSize) {
    super(maxSize, 0.75f, true);
    this.maxSize = maxSize;
}

@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
    boolean remove = size() > maxSize;
    if (remove) {
        LOGGER.info("Evicted entry: " + eldest);
    }
    return remove;
}

@Override
public Iterator<V> iterator() {
    return new LRUCacheIterator();
}

private class LRUCacheIterator implements Iterator<V> {
    private final java.util.Iterator<Map.Entry<K, V>> iterator = LRUCache.this.entrySet().iterator();

    @Override
    public boolean hasNext() {
        return iterator.hasNext();
    }

    @Override
    public V next() {
        if (!hasNext()) {
            throw new java.util.NoSuchElementException();
        }
        return iterator.next().getValue();
    }
}

public static void main(String[] args) {
    LRUCache<String, Integer> lruCache = new LRUCache<>(3);

    lruCache.put("one", 1);
    lruCache.put("two", 2);
    lruCache.put("three", 3);

    System.out.println("Cache content after initial insertion:");
    for (Integer value : lruCache) {
        System.out.println(value);
    }

    // Adding more elements to trigger eviction
    lruCache.put("four", 4);
    lruCache.put("five", 5);

    System.out.println("Cache content after eviction:");
    for (Integer value : lruCache) {
        System.out.println(value);
    }
}

}