重複の可能性:
JavaでのHashMapの最大サイズの制限
キーの数が容量を超えたときにJavaのHashMapが再ハッシュされないようにするにはどうすればよいですか。ハッシュマップに保存されるキーの数を制限したい(ハッシュマップのデフォルトの削除ポリシーに基づいて追加のキーを削除する必要がありますが、ハッシュマップは再ハッシュされたり容量が増えたりしないようにする必要があります)
重複の可能性:
JavaでのHashMapの最大サイズの制限
キーの数が容量を超えたときにJavaの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)メソッドをオーバーライドして、新しいマッピングがマップに追加されたときに古いマッピングを自動的に削除するポリシーを課すことができます。