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,链表算法和数据结构基础好的话,还是挺好理解的。

原文地址:https://www.cnblogs.com/zhjh256/p/10318578.html