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
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/539593.html
標籤:Java
上一篇:每日演算法之字串的排列
下一篇:MyBatis詳解(二)
