我看到了 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
类提供了 readObject
和 writeObject
使 transient
修饰符没有实际意义。)
关于java - 无法理解 java 中 HashMap 的清除方法的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12136863/