leetcode_Design and implement a data structure for Least Recently Used (LRU) cache

来源:互联网 发布:中国蓝tv网络直播 编辑:程序博客网 时间:2024/04/30 09:18

    /*     * Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.     * */public class LRUCache{private Map<Integer, MapNode> map = null;private int capacity;private int size;public LRUCache(int capacity){this.capacity = capacity;size = 0;map = new LinkedHashMap<Integer,MapNode>();}public int get(int key){if(map.containsKey(key) == false){return -1;}else {int r = map.get(key).value;//adjust the position of this itemMapNode tmMapNode = map.get(key);map.remove(key);map.put(key, tmMapNode);return r;}}public void set(int key, int value){if(map.containsKey(key)==false){if(size<capacity){map.put(new Integer(key), new MapNode(key, value));size++;}else {//if size capacity is zero , does this still work correctly?//delete the first one which is the least used oneIterator<Entry<Integer, MapNode>> iterator= map.entrySet().iterator();Integer tmp = null;if(iterator.hasNext()){tmp = iterator.next().getKey();//map.remove(tmp); //map.put(new Integer(key), new MapNode(key, value)); }if(tmp != null){map.remove(tmp); map.put(new Integer(key), new MapNode(key, value)); }}}else {//delete this node and change its content then add it,make it the last oneMapNode tmpMapNode =  map.get(new Integer(key));map.remove(new Integer(key));tmpMapNode.value = value;map.put(new Integer(key), tmpMapNode);}}public class MapNode{int key;int value;public MapNode(int k, int v){key = k;value = v;}}} 

总结延伸://各种容器使用 map hashmap 等 他们操作的复杂度?,这里使用的LinkedHashMap其中数据保持插入顺序,后进的在头部

(notice that java.util.LinkedHashMap uses insertion-order.)

0 0