佳佳的博客
Menu
首页
IT
生活
学生
游戏
随机
LinkedHashMap的自动删除功能
IT
Java
2018-03-19
目录
`LinkedHashMap` 除了值是有序的之外,还可以自动删除最前面保存的值。 `LinkedHashMap` 中有一个 `removeEldestEntry` 方法,如果这个方法返回 `true`,`Map` 中最前面添加的内容将被删除,它是在添加属性的 `put` 或 `putAll` 方法被调用后自动调用的。 这个功能主要是用在缓存中,用来限定缓存的最大数量,以防止缓存无限制地增长。 设置方法就是覆写 `removeEldestEntry` 方法,代码如下: ```java package liujiajia.me.learn.java; import com.sun.deploy.util.StringUtils; import java.util.LinkedHashMap; import java.util.Map; /** * Created by liujiajia on 2018/3/19. */ public class Application { public static final int DEFAULT_CACHE_LIMIT = 10; private static final Map<String, Object> viewCreationCache = new LinkedHashMap<String, Object>(DEFAULT_CACHE_LIMIT, 0.75f, true) { @Override protected boolean removeEldestEntry(Map.Entry<String, Object> eldest) { if (size() > DEFAULT_CACHE_LIMIT) { viewCreationCache.remove(eldest.getKey()); return true; } else { return false; } } }; public static void main(String[] args) { for (int i = 0; i < 20; i++) { viewCreationCache.put(String.valueOf(i), null); System.out.println(viewCreationCache.size()); System.out.println(StringUtils.join(viewCreationCache.keySet(), ",")); } } } ``` 执行结果: ```java 1 0 2 0,1 3 0,1,2 4 0,1,2,3 5 0,1,2,3,4 6 0,1,2,3,4,5 7 0,1,2,3,4,5,6 8 0,1,2,3,4,5,6,7 9 0,1,2,3,4,5,6,7,8 10 0,1,2,3,4,5,6,7,8,9 10 1,2,3,4,5,6,7,8,9,10 10 2,3,4,5,6,7,8,9,10,11 10 3,4,5,6,7,8,9,10,11,12 10 4,5,6,7,8,9,10,11,12,13 10 5,6,7,8,9,10,11,12,13,14 10 6,7,8,9,10,11,12,13,14,15 10 7,8,9,10,11,12,13,14,15,16 10 8,9,10,11,12,13,14,15,16,17 10 9,10,11,12,13,14,15,16,17,18 10 10,11,12,13,14,15,16,17,18,19 ```
版权声明:原创文章,未经允许不得转载。
https://www.liujiajia.me/2018/3/19/linkedhashmap的自动删除功能
« Wallpaper Engine 错误代码 800700ea & c00d36fa 的解决办法
发票助手二维码 »
昵称
*
电子邮箱
*
回复内容
*
(回复审核后才会显示)
提交