• java限制HashMap大小,并实现LRU算法


    有时候需要往一个MAP中写入一些记录,但又怕无限制地写入会导致内存爆掉,所以得限制这个MAP的大小。

    实现:LinkedHashMap提供了简单的方法。

    首先,定义一个最大数,比如1000,然后new LinkedHashMap的时候,重写一下removeEldestEntry()方法:

    int maximumSize = 1000;
    LinkedHashMap<K, String> myMap= new LinkedHashMap<K, String>() {
      private static final long serialVersionUID = 1L;
      @Override
      protected boolean removeEldestEntry(Map.Entry<K, String> eldest) {
        return size() > maximumSize;
      }
    };

    这样,每当调用myMap.put()的时候,就会自动判断是否个数已经超过maximumSize,如果超过就删掉最旧的那条(相当于是FIFO算法)。

    除了自定义实现外,google的com.googlecode.concurrentlinkedhashmap实现了LinkedHashMap的LRU算法,因此实际中我们一般也不会重新造轮子。

    相关源码的解析可以参见https://www.cnblogs.com/mengheng/p/3683137.html,该文章应该是基于jdk 1.7的,反正不是1.8,链表算法和数据结构基础好的话,还是挺好理解的。

  • 相关阅读:
    消融实验(Ablation experiment)& 控制变量法
    reduce的方向
    深度学习和推荐系统的资料
    [Tailwind] Transitioning Rounded Corners using the JIT Compiler
    [JS Pattern] Proxy pattern
    git base cmd
    python app
    gitcmd ins tortoiseGitGUI
    vs vscode vs+ qt
    git branch tag
  • 原文地址:https://www.cnblogs.com/zhjh256/p/10318578.html
Copyright © 2020-2023  润新知