java - 当清除和重新加载java Hashtable时,内存是如何管理的

标签 java

如果我有一个 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/

相关文章:

java - 硬删除的对象仍然出现在 AppEngine 管理控制台中

java - 抓取数据。保存存档?

java - 将变量添加到所有日志消息中

java - 格式相对于串联的优势

java - 想要将 a -z 更改为 b-z

java - Spring Data JPA 和 Feign 的组合映射

java - Hibernate 调用错误的 setter

java - 如何等待使用不同的 `Future` 创建的 `ExecutorServices` 列表

java - 包含泛型成员的类数组的问题

java - 不可变字符串和final关键字