2

可能重复:
在 Java 中限制 HashMap 的最大大小

当键数超过容量时,如何确保 Java 中的 HashMap 不会重新散列。我想限制存储在 hashmap 中的键数量(额外的键应该根据 hashmap 的默认驱逐策略被驱逐,但 hashmap 不应该被重新哈希/增加容量)

4

3 回答 3

4

您可以使用java.util.LinkedHashMap,用法示例

Map m = new LinkedHashMap() {
    int max = 2;
    @Override
    protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > max;
    }
};
m.put(1, 1);
m.put(2, 1);
m.put(3, 1);
System.out.println(m.size());

输出

2

accessOrder = true如果您在其构造函数中设置,您也可以使其成为 LRU 缓存

public LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
于 2012-12-23T06:15:42.967 回答
0

我认为没有任何内置支持,但您可能希望自己实现自定义限制:

    private Map<K,V> myMap = new HashMap<K,V>();
    private int MAX_SIZE = 100;

    public void addElement(K k, V v){
       if(myMap.size() == MAX_SIZE){
             throw new Exception("Size Exceeded");
             //if don't want'to throw exception then remove the above statement
       }else{
          myMap.put(k,v);
       }
    }
    ......
于 2012-12-23T06:07:24.840 回答
0

您可以扩展LinkedHashMap并提供实现removeEldestEntry

可以重写 removeEldestEntry(Map.Entry) 方法,以在将新映射添加到映射时自动删除陈旧映射的策略。

于 2012-12-23T06:08:51.800 回答