为什么HashMap.clear()方法不再使用Arrays.fill()来清空?
- 论坛
- 为什么HashMap.clear()方法不再使用Arrays.fill()来清空?
8 浏览
为什么HashMap.clear()方法不再使用Arrays.fill()来清空?
我注意到HashMap.clear()
的实现中有一些奇怪之处。这是在OpenJDK 7u40中的样子:
public void clear() { modCount++; Arrays.fill(table, null); size = 0; }
而这是在OpenJDK 8u40中的样子:
public void clear() { Node[] tab; modCount++; if ((tab = table) != null && size > 0) { size = 0; for (int i = 0; i < tab.length; ++i) tab[i] = null; } }
我理解现在的table
可以为空的一个空映射,因此需要进行额外的检查并将其缓存到一个局部变量中。但为什么要用一个for循环来替代Arrays.fill()
呢?
这个变化似乎是在这次提交中引入的。不幸的是,我没有找到任何关于为什么一个普通的for循环可能比Arrays.fill()
更好的解释。它是更快吗?还是更安全?