Java中使用频率最高的三种数据结构,Set,List,Map;通过对他们各自接口的实现方法的研究并加以组合,可以做到很多有效率的事情;
LinkedHashMap:来自与hashMap,我们都知道,HashMap的数组存储的数据结构entry是一个单链表;而LinkedHashMap所做出的改进就在于其重写了hashmap中的entry数据结构,加入before,after使其成为了双链表,同时新建header用于存储当前元素;LinkedHashMap的用法于其父类hashmap相似,详细不表;
这里我们关注的是通过对Linkedhashmap重写hashmap的方法的研究发现在addentry这个方法里面的removeEldestEntry这个函数,可以帮助我们判断并删除最近使用的元素;简单的代码如下
public class LRUCache2<K,V>extends LinkedHashMap{
private final int MAX_CHCHE_SIZE;
public LRUCache2(int cacheSize)
{
super((int) Math.ceil(cacheSize / 0.75), 0.75f, true);
MAX_CHCHE_SIZE=cacheSize;
}
@Override
protected boolean removeEldestEntry(Map.Entry eldest){
return size()>MAX_CHCHE_SIZE;
}
}
关键处在于继承LinkedHashMap,并实现removeEntrySet方法