zoukankan      html  css  js  c++  java
  • LRU数据结构-自定义

        public static void main(String[] args) {
            try {
                LRUStruct lruStruct = new LRUStruct(4);
                lruStruct.put("1", 1);
                lruStruct.put("2", 2);
                lruStruct.put("3", 3);
                lruStruct.put("4", 4);
                lruStruct.put("5", 5);
                System.out.println(lruStruct.toString());
                lruStruct.get("2");
    
                System.out.println(lruStruct.toString());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        static class LRUStruct<T, W> {
            //存储key对应的list中位置,用于get时,把get的key放在最后
            private HashMap<T, Integer> existConfig = new HashMap();
            //存储实际数据
            private HashMap<T, W> data = new HashMap();
            //key位置
            private List<T> list;
            private int max;
    
            public LRUStruct(int count) throws Exception {
                if (count <= 0) {
                    throw new Exception("count必须大于0");
                }
                this.max = count;
                this.list = new ArrayList<>(max);
            }
    
            public void put(T key, W value) {
                if (!existConfig.containsKey(key)) {
                    this.existConfig.put(key, list.size());
                    this.list.add(key);
                    this.data.put(key, value);
                }
            }
    
            public W get(T key) {
                if (existConfig.containsKey(key)) {
                    int p = existConfig.get(key);
                    this.list.remove(p);
                    this.list.add(key);
                }
                return data.containsKey(key) ? data.get(key) : null;
            }
    
            public String toString() {
                StringBuffer stringBuffer = new StringBuffer();
                for (T key : list) {
                    stringBuffer.append("key=" + key).append(";value=" + data.get(key));
                }
                return stringBuffer.toString();
            }
        }
    }
  • 相关阅读:
    C#连接SQL Server测试
    2015结束,迎接2016
    notepad ++ 编辑 powershell profile 文件时的诡异问题
    安静的思考
    把生活过的像模像样已经很不容易
    查询SQL Server 版本信息
    一段SQL代码
    javascript面向对象编程的3种常见封装形式解析
    javascript中new操作符的原理
    关于javascript中this 指向的4种调用模式
  • 原文地址:https://www.cnblogs.com/use-D/p/13307095.html
Copyright © 2011-2022 走看看