Java 防止将hashmap的大小调整为当前大小的两倍
我们有一个一百万大小的HashMap。我们必须存储100万和100个对象,但我们不希望HashMap的大小(200万)增加到100个对象的当前大小(100万)的两倍 编辑: 我想优化hashmap的大小调整。因为只存储100个对象,我们需要分配100万个对象的大小。那就是浪费记忆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
容量被实现为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>