2

重複の可能性:
JavaでのHashMapの最大サイズの制限

キーの数が容量を超えたときにJavaの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 に答える