Java 防止将hashmap的大小调整为当前大小的两倍

Java 防止将hashmap的大小调整为当前大小的两倍,java,hashmap,Java,Hashmap,我们有一个一百万大小的HashMap。我们必须存储100万和100个对象,但我们不希望HashMap的大小(200万)增加到100个对象的当前大小(100万)的两倍 编辑: 我想优化hashmap的大小调整。因为只存储100个对象,我们需要分配100万个对象的大小。那就是浪费记忆 如何克服这个问题?HashMap容量被实现为2的幂,因此如果2^20(1048576)对您来说不够,您就必须使用2^21(2097152) 编辑: 实际上,您可以通过指定高负载系数来控制容量 如果条目的确切最大数量为1

我们有一个一百万大小的HashMap。我们必须存储100万和100个对象,但我们不希望HashMap的大小(200万)增加到100个对象的当前大小(100万)的两倍

编辑: 我想优化hashmap的大小调整。因为只存储100个对象,我们需要分配100万个对象的大小。那就是浪费记忆


如何克服这个问题?

HashMap
容量被实现为2的幂,因此如果2^20(1048576)对您来说不够,您就必须使用2^21(2097152)

编辑:

实际上,您可以通过指定高负载系数来控制容量

如果条目的确切最大数量为1000100,则如果条目数量达到capacity*load factor,HashMap的容量将加倍。因此,如果容量是1048576,而您不想将其扩展到2097152,那么您需要大约0.954或更高的负载系数

因此,使用以下构造函数初始化实例应该可以做到这一点:

 HashMap<String,Integer> map = new HashMap<> (1048576, 0.954);
HashMap-map=新的HashMap(1048576,0.954);
相关代码(JDK 6):

public HashMap(int initialCapacity,float loadFactor){
...
//查找2的幂>=初始容量
int容量=1;
同时(容量<初始容量)
容量拆分密钥并具有

Map<Key1, Map<Key2, Value>

Map@Danielson的可能重复事实上,这个问题与那个问题无关。它与初始大小以及更新其分配有关。我应该链接到已接受的答案,而不是问题我猜你是在问如何在hashmap上设置大小限制?对吗?@nafas:我想优化它调整hashmap的大小。因为对于字符串只有100个对象,我们需要分配100万个对象的大小。所以这是对内存的浪费
void addEntry(int hash, K key, V value, int bucketIndex) {
    Entry<K,V> e = table[bucketIndex];
    table[bucketIndex] = new Entry<K,V>(hash, key, value, e);
    if (size++ >= threshold) // this is what you want to avoid
        resize(2 * table.length);
}
Map<Key1, Map<Key2, Value>