当密钥数量超过容量时,如何确保Java中的HashMap不会重新散列。我想限制存储在hashmap中的密钥数量(额外的密钥应根据hashmap的默认逐出策略逐出,但hashmap不应该重新散列/增加容量)
答案 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)方法,以便在将新映射添加到地图时自动删除过时映射的策略。