有时候需要往一个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,链表算法和数据结构基础好的话,还是挺好理解的。