限制Map大小的实现方法

来源:互联网 发布:数据分析导论 编辑:程序博客网 时间:2024/05/21 13:06

需求:

有时候需要往一个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算法)。

LinkedHashMap添加记录的源代码如下:

    /**     * This override alters behavior of superclass put method. It causes newly     * allocated entry to get inserted at the end of the linked list and     * removes the eldest entry if appropriate.     */    void addEntry(int hash, K key, V value, int bucketIndex) {        super.addEntry(hash, key, value, bucketIndex);        // Remove eldest entry if instructed        Entry<K,V> eldest = header.after;        if (removeEldestEntry(eldest)) {            removeEntryForKey(eldest.key);        }    }


0 0
原创粉丝点击