java - 无法理解 java 中 HashMap 的清除方法的实现

标签 java hashmap

我看到了 java hash map,clear 方法,像这样:

public void clear() {
    modCount++;
    Entry[] tab = table;
    for (int i = 0; i < tab.length; i++)
        tab[i] = null;
    size = 0;
}

我不明白,为什么要清除新标签。

为什么不使用table来清除呢?

最佳答案

I don't understand, why new tab to clear.

这不是一个新表...它只是一个局部变量。

我可以想到三个可能的原因:

  • 可读性,正如@Bhesh Gurung 所建议的那样......虽然它在这里几乎没有什么区别(IMO)。

  • 如果一个线程调用 clear() 而另一个线程执行可能导致表扩展的更新,它可能会(某种程度上)减轻造成的损害。但这肯定不能解决问题,所以我倾向于认为这是荒谬的。

  • 它可能会提高性能;例如由于优化器知道局部变量 tab 中的引用不能更改,因此可以更好地优化数组边界检查。

其中,我认为第 3 个原因最有可能。

(我认为这与 transient 修饰符没有任何关系。在这种情况下,修饰符只是为了提高可读性。HashMap 类提供了 readObjectwriteObject 使 transient 修饰符没有实际意义。)

关于java - 无法理解 java 中 HashMap 的清除方法的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12136863/

相关文章:

flutter - 如何从列表Flutter中的 map 中检索值?

java - 我从 MySql 收到异常,它不会更新表?

java - 有没有办法让 ActionListener 取消?

java - Service层异常处理

java - 使用 HashMap 将字符串转换为整数以优化空间使用

java - 通过对某些字段进行分组,将 java hashMap 转换为另一个 hashMap

java - JPA 2.1 转换器注释

java - 如何向本地主机发送邮件

java - 我是否可以有一个可以同时采用 HashMap 或列表作为参数的方法?

C++ STL unordered_map问题与疑惑