LinkedHashMap 간단 한 LRU 알고리즘 구현

7103 단어 자바LRUHashMap
LinkedHashMap 간단 한 LRU 알고리즘 구현
최근 문 제 를 풀 때 LRU (Least Recently Used) 알고리즘 을 보 았 습 니 다. 그래서 인터넷 에서 찾 아 보 니 자 바 를 사용 한 링크 드 하 쉬 맵 의 실현 이 매우 간단 합 니 다. 링크 드 하 쉬 맵 의 소스 코드 와 결합 하여 보 았 습 니 다. 아래 에 코드 를 직접 붙 이 고 주석 은 매우 상세 하 게 썼 습 니 다.
public class LRUWithLinkedHashMap {
    Map<Integer, Integer> cache;
    int capacity;

    public LRUWithLinkedHashMap(int capacity) {
        this.capacity = capacity;
        //     loadFactor : 0.75  size() > capacity*loadFactor  map     
        //               ,                     
        //  LRU  --accessOrder: true             false         
        this.cache = new LinkedHashMap<Integer, Integer>(capacity, 0.75f, true) {
            protected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) {
                //                 
                return size() > capacity;
            }
        };
    }

    @Override
    public String toString() {
        StringBuilder list = new StringBuilder();
        for (Integer integer : this.cache.values()) {
            list.append(integer).append("->");
        }
        return list.substring(0, list.length() - 2);
    }
    
    public int get(int key) {
        //getOrDefault    key         -1
        //        accessOrder=true     get      afterNodeAccess()  
        return cache.getOrDefault(key, -1);
    }

    public void put(int key, int value) {
        //         removeEldestEntry()             
        cache.put(key, value);
    }
}

좋은 웹페이지 즐겨찾기