论坛首页 Java企业应用论坛

通过继承LinkedHashMap实现LRU缓存

浏览 1622 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2015-01-26  
<pre name="code" class="java">

import java.util.LinkedHashMap;
import java.util.Map;
/**
* LinkedHashMap默认是不删除元素的,通过重写removeEldestEntry来实现最大容量
* @author bean
*/
public class LRUMap&lt;K, V&gt; extends LinkedHashMap&lt;K, V&gt; {
private static final long serialVersionUID = 6918023506928428613L;
// 最大容量
public static int MAX_SIZE = 10;

public LRUMap(int initialCapacity, float loadFactor, boolean accessOrder) {
super(initialCapacity, loadFactor, accessOrder);

}

/**
* 如果Map的尺寸大于设定的最大容量,返回true,再新加入对象时删除最老的对象
*/
protected boolean removeEldestEntry(Map.Entry&lt;K, V&gt; eldest) {
return size() &gt; MAX_SIZE;
}

public static void main(String[] args) {
Map&lt;Integer, Integer&gt; map=new LRUMap&lt;Integer, Integer&gt;(10,0.75f,true);
LRUMap.MAX_SIZE=4;
map.put(1, 1);
map.put(2, 2);
map.put(3, 3);
map.put(4, 4);
map.get(3);
map.put(5, 5);
for (Map.Entry&lt;Integer, Integer&gt; entry : map.entrySet()) {
System.err.println(entry.getKey());
}
//打印结果是 2 4 3 5 ,实现了LRU的功能
}
}

</pre>
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics