HashMap java中键的数量的硬限制/上限

时间:2012-12-23 06:02:53

标签: java

  

可能重复:
  Limiting the max size of a HashMap in Java

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

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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);
       }
    }
    ......

答案 2 :(得分:0)

您可以扩展LinkedHashMap并提供removeEldestEntry

的实施
  

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