我看过java hash map,clear方法,如下:
public void clear() {
    modCount++;
    Entry[] tab = table;
    for (int i = 0; i < tab.length; i++)
        tab[i] = null;
    size = 0;
}
我不明白,为什么要采取新标签清除.
为什么不用表清除?
我不明白,为什么要清除新标签。
它不是一个新表......它只是一个局部变量。
我可以想到三个可能的原因:
可读性,正如 @Bhesh Gurung 所建议的......尽管它在这里几乎没有什么区别(IMO)。
clear()如果一个线程调用而另一个线程执行可能导致表扩展的更新,它可能会(在某种程度上)减轻所造成的损害。但它肯定不能解决问题,所以我倾向于认为这是无意义的。
它可能会提高性能;例如,由于优化器知道局部变量中的引用tab不能更改,因此它可以更好地优化数组边界检查。
其中,我认为第三个原因最合理。
(我不认为这与修饰符有任何关系transient。在这种情况下,修饰符只是为了可读性而存在。该类HashMap提供了readObjectand writeObject,这使得transient修饰符变得毫无意义。)
| 归档时间: | 
 | 
| 查看次数: | 297 次 | 
| 最近记录: |