可能重复:
在 Java 中限制 HashMap 的最大大小
当键数超过容量时,如何确保 Java 中的 HashMap 不会重新散列。我想限制存储在 hashmap 中的键数量(额外的键应该根据 hashmap 的默认驱逐策略被驱逐,但 hashmap 不应该被重新哈希/增加容量)
可能重复:
在 Java 中限制 HashMap 的最大大小
当键数超过容量时,如何确保 Java 中的 HashMap 不会重新散列。我想限制存储在 hashmap 中的键数量(额外的键应该根据 hashmap 的默认驱逐策略被驱逐,但 hashmap 不应该被重新哈希/增加容量)
您可以使用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)
我认为没有任何内置支持,但您可能希望自己实现自定义限制:
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);
}
}
......
您可以扩展LinkedHashMap
并提供实现removeEldestEntry
可以重写 removeEldestEntry(Map.Entry) 方法,以在将新映射添加到映射时自动删除陈旧映射的策略。