LRU Cache
Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get
and set
.
get(key)
- Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.set(key, value)
- Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.
效率低了一点
1 import java.util.ArrayList; 2 import java.util.HashMap; 3 import java.util.List; 4 5 public class LRUCache { 6 List<Element> cache = new ArrayList<Element>(); 7 int capacity; 8 HashMap<Integer, Boolean> isInCache = new HashMap<Integer, Boolean>(); //key是否in cache 9 10 public LRUCache(int capacity) { 11 this.capacity = capacity; 12 } 13 14 public int get(int key) { 15 boolean isKeyInCache = false; 16 int indexOfKey = -1; 17 int value = -1; 18 Element element = null; 19 //查找cache中是否有key 20 if(isInCache.get(key) != null) 21 for(int i = 0; i < cache.size(); i++){ 22 element = cache.get(i); 23 if(element.key == key){ //cache中有key 24 value = element.value; 25 isKeyInCache = true; 26 indexOfKey = i; 27 break; 28 }//if 29 }//for 30 31 if(isKeyInCache == true){ //cache中有key 32 cache.remove(indexOfKey); 33 cache.add(0, element); //更新key在cache中的位置 34 }//if 35 36 return value; 37 } 38 39 public void set(int key, int value) { 40 int valueOfCache = -1; 41 if((valueOfCache = get(key)) == -1){ //在cache中不存在 42 if(cache.size() < capacity) //cache没有满,在0号位置添加 43 cache.add(0, new Element(key, value)); 44 else{ 45 isInCache.remove(cache.get(capacity - 1).key); //移除在hash表中的数据 46 cache.remove(capacity - 1); //cache满了,移除最后一个,在0位置添加 47 cache.add(0, new Element(key, value)); 48 } 49 }else{ //如果在cache中存在 50 if(valueOfCache != value){ //更新cache的值 51 cache.remove(0); 52 cache.add(0, new Element(key, value)); 53 } 54 } 55 56 isInCache.put(key, true); 57 } 58 } 59 /** 60 * cache中的元素 61 * @author Administrator 62 * 63 */ 64 class Element{ 65 int key; 66 int value; 67 68 public Element(int key, int value){ 69 this.key = key; 70 this.value = value; 71 } 72 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。