无法理解java中HashMap的clear方法的实现

use*_*860 7 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;
}
Run Code Online (Sandbox Code Playgroud)

我不明白,为什么要采取新标签清除.

为什么不用表清除?

Ste*_*n C 4

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

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

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

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

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

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

其中,我认为第三个原因最合理。

(我不认为这与修饰符有任何关系transient。在这种情况下,修饰符只是为了可读性而存在。该类HashMap提供了readObjectand writeObject,这使得transient修饰符变得毫无意义。)