LinkedHashSet和LinkedHashMap手记
  MlAYo34GUhos 2023年11月01日 44 0

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
		*/

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   114   0   0 Java
  8s1LUHPryisj   2024年05月17日   49   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
MlAYo34GUhos