如果我有一个 java Hashtable 或 HashMap 并使用一组键加载一堆条目,如果我“clear()”它,然后使用相同键的子集使用其他条目重新加载它,它会重用相同的表内存而不发生抖动?并且不必对其表进行“重新散列”或重新分配和重建?
原因是我有一个非常动态的记录池,并且希望使用一组公共(public)键控元素的不同子集有效地重新加载它们 - 如果我使用的是清除后不需要进行任何重新计算和重新散列与最初构建表时使用的同一组键将非常好。我想这里有人可能知道,而不是我花很多时间浏览源代码并测试它:)
谢谢!
最佳答案
在清除之前,无论Map上是否存在相同的对象,都会重新计算每个条目的哈希值。
确实,HashMap#put
的代码开头为:
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key); // hash the key everytime, no concept of cache
clear
方法的主要优点是不将 HashMap
设置为其初始容量,从而避免任何无用的大小调整。 (https://stackoverflow.com/a/6757944/985949)
关于java - 当清除和重新加载java Hashtable时,内存是如何管理的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25495452/