zoukankan      html  css  js  c++  java
  • 使用LinkedHashMap实现一个简易的LRU缓存

    方法1 :leetcode 解法

    方法2:

    package arithmetic;
    
    import java.util.LinkedHashMap;
    import java.util.Map;
    
    /**
     * @Author yuanjingkun
     * @create 2020/4/29 17:43
     */
    public class LRUCache<K, V> extends LinkedHashMap<K, V> {
        private int cacheSize;
    
        public LRUCache(int cacheSize) {
            super(16, 0.75f, true);
            this.cacheSize = cacheSize;
        }
    
        @Override
        protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
            return size() > cacheSize;
        }
    
        public static void main(String[] args) {
            LRUCache<String, String> lru = new LRUCache<>(5);
            lru.put("球员1", "杜兰特");
            lru.put("球员2", "表妹");
            lru.put("球员3", "库里");
            System.out.println(lru);
            lru.get("球员1");
            System.out.println(lru);
            lru.put("球员4", "一哥");
            lru.put("球员5", "汤姆");
            System.out.println(lru);
            lru.put("球员6", "格林");
            System.out.println(lru);
        }
    
    
    }

    方法3:https://blog.csdn.net/Apeopl/article/details/90137398

    import java.util.LinkedHashMap;
    import java.util.Map;
    import java.util.Set;
    
    public class SimpleLRUCache<K, V> {
    
        private final int MAX_CACHE_SIZE;
        private final float DEFAULT_LOAD_FACTORY = 0.75f;
    
        LinkedHashMap<K, V> map;
    
        public SimpleLRUCache(int cacheSize) {
            MAX_CACHE_SIZE = cacheSize;
            int capacity = (int)Math.ceil(MAX_CACHE_SIZE / DEFAULT_LOAD_FACTORY) + 1;
            map = new LinkedHashMap<K, V>(capacity, DEFAULT_LOAD_FACTORY, true) {
                private static final long serialVersionUID = 1L;
                @Override
                protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
                    return size() > MAX_CACHE_SIZE;
                }
            };
        }
    
        public synchronized void put(K key, V value) {
            map.put(key, value);
        }
        public synchronized V get(K key) {
            return map.get(key);
        }
        public synchronized void remove(K key) {
            map.remove(key);
        }
        public synchronized Set<Map.Entry<K, V>> getAll() {
            return map.entrySet();
        }
        @Override
        public String toString() {
            StringBuilder stringBuilder = new StringBuilder();
            for (Map.Entry<K, V> entry : map.entrySet()) {
                stringBuilder.append(String.format("%s: %s  ", entry.getKey(), entry.getValue()));
            }
            return stringBuilder.toString();
        }
    
        public static void main(String[] args) {
            SimpleLRUCache<String, String> lru = new SimpleLRUCache<>(5);
            lru.put("球员1", "杜兰特");
            lru.put("球员2", "表妹");
            lru.put("球员3", "库里");
            System.out.println(lru);
            lru.get("球员1");
            System.out.println(lru);
            lru.put("球员4", "一哥");
            lru.put("球员5", "汤姆");
            System.out.println(lru);
            lru.put("球员6", "格林");
            System.out.println(lru);
        }
    }
  • 相关阅读:
    awk统计命令(求和、求平均、求最大值、求最小值)(转)
    高性能跨平台网络IO(Reactor、epoll、iocp)总结
    进程通信和同步(转)
    C++11原子操作与无锁编程(转)
    在线代码编译运行工具
    linux ps 命令的查看
    转: linux sed 命令的使用
    转:利用Eclipse CDT 阅读C/C++代码
    转:Raft一致性选举算法的ppt与视频
    转:ffmpeg time_base详解
  • 原文地址:https://www.cnblogs.com/thiaoqueen/p/12796769.html
Copyright © 2011-2022 走看看