LinkedHashSet和LinkedHashMap手记
2023-03-31 10:42:06 时间
LinkedHashSet和LinkedHashMap
这两个类维护一个双向链表,可以记住插入元素的顺序。
实例:LinkedHashMap
可以使用访问顺序来迭代处理映射条目,当get或者put访问元素时,受影响的条目从当前位置删除,然后放到末尾,只影响链表,不影响散列表的桶。
LinkedHashMap<K,V>(initialCapacity, loadFactor,true) //构造访问顺序迭代处理的Map
这样的好处是,可以保持”最近最少使用原则“,这样当容器满的时候可以通过覆盖removeEldestEntry来删掉前面的很少使用的缓存,。
// 定义一个容量为10,装填因子为0.75,访问顺序的cache,
// 当size/容量>装填因子时,散列表就会再次散列。
var cache = new LinkedHashMap<String,Integer>(10, 0.75F, true){
// 复写该方法,则会删除掉Map中最不常访问的元素。
protected boolean removeEldestEntry(Map.Entry<String,Integer> eldest){
// 当容器的内容>5时删掉最不常访问的元素
return size() > 5;
}
};
cache.put("zs", 1);
cache.put("ls", 2);
cache.put("ww", 2);
cache.put("zs",3); // 对张s进行覆盖,则会出现在最后访问之后
cache.forEach((k,v)->{
System.out.println(k+":"+v);
});
/*
ls:2
ww:2
zs:3
*/
System.out.println("================");
cache.put("ml", 1);
cache.put("zl", 3);
cache.forEach((k,v)->{
System.out.println(k+":"+v);
});
/*此时Map的size已经到5,添加一个元素后,将最不常访问到的第一个元素删除
ls:2
ww:2
zs:3
ml:1
zl:3
*/
System.out.println("***************");
cache.put("lll", 4);
cache.forEach((k,v)->{
System.out.println(k+":"+v);
});
/*
ww:2
zs:3
ml:1
zl:3
lll:4
*/
相关文章
- 美国土安全部建议非必要时禁用Java
- 甲骨文升级Java 专家称Bug问题依旧
- 挨踢部落坐诊第五期:数据采集与前端运用
- 甲骨文公布了Java SE 7u11更新
- 美国国土安全部建议用户暂时禁用Java
- 美安全专家建议PC用户暂时禁用Java
- 是谁让JavaScript像Java的?
- 看看JDK 8给我们带来什么
- 看看JDK 8 给我们带来什么
- Java枚举的七种常见用法
- 选择HttpHandler还是HttpModule?
- JavaEE7新特性JMS 2.0公共审查草案发布
- 经过糟糕一年后,Java正沿着正确方向发展
- 探索Java语言与JVM中的Lambda表达式
- C#中关于zip压缩解压帮助类的封装
- 当ASP.NET MVC邂逅jQuery.Ajax提交数组
- 挨踢部落坐诊第四期:Java消息队列的应用场景和作用
- 最适合Java开发者的大数据工具和框架
- 深入理解Apache Flink核心技术
- Spark体系架构必读