step 1:建立对象。采用最少访问次数排序。
final int max_length = 2; 最大只能容量2个。
Map cache = new LinkedHashMap(max_length+1, .75F, true) {
public boolean removeEldestEntry(Map.Entry eldest) {
return size() > max_length;
}
};
step 2:建立对象
cache.put("1", "value1");
cache.put("2", "value2");
cache.put("3", "value3");
System.out.println("----------华丽的分割线---------");
System.out.println(cache.get("1"));
System.out.println(cache.get("2"));
System.out.println(cache.get("3"));
结果是:
----------华丽的分割线---------
null
value2
value3 即第一个插入的数被取代了。
STEP 3: 改变访问顺序。
cache.put("1", "value1");
System.out.println(cache.get("1"));
cache.put("2", "value2");
System.out.println(cache.get("1"));
cache.put("3", "value3");
System.out.println("----------华丽的分割线---------");
System.out.println(cache.get("1"));
System.out.println(cache.get("2"));
System.out.println(cache.get("3"));
结果是:
value1
value1
----------华丽的分割线---------
value1
null
value3 value2被取代了。
[color=red]设置MAP为只读[/color]
cache = Collections.unmodifiableMap(cache); //这步设置之后就不允许对该MAP的对象做删除操作,否则会包异常。
final int max_length = 2; 最大只能容量2个。
Map cache = new LinkedHashMap(max_length+1, .75F, true) {
public boolean removeEldestEntry(Map.Entry eldest) {
return size() > max_length;
}
};
step 2:建立对象
cache.put("1", "value1");
cache.put("2", "value2");
cache.put("3", "value3");
System.out.println("----------华丽的分割线---------");
System.out.println(cache.get("1"));
System.out.println(cache.get("2"));
System.out.println(cache.get("3"));
结果是:
----------华丽的分割线---------
null
value2
value3 即第一个插入的数被取代了。
STEP 3: 改变访问顺序。
cache.put("1", "value1");
System.out.println(cache.get("1"));
cache.put("2", "value2");
System.out.println(cache.get("1"));
cache.put("3", "value3");
System.out.println("----------华丽的分割线---------");
System.out.println(cache.get("1"));
System.out.println(cache.get("2"));
System.out.println(cache.get("3"));
结果是:
value1
value1
----------华丽的分割线---------
value1
null
value3 value2被取代了。
[color=red]设置MAP为只读[/color]
cache = Collections.unmodifiableMap(cache); //这步设置之后就不允许对该MAP的对象做删除操作,否则会包异常。
本文通过实例演示如何使用Java实现LRU(最近最少使用)缓存机制。文章首先创建了一个固定大小的缓存,当缓存满时,最近最少使用的条目将被移除。然后展示了如何设置Map为只读,防止进一步修改。
499

被折叠的 条评论
为什么被折叠?



