我注意到在执行中有些奇怪HashMap.clear().这就是它在OpenJDK 7u40中的表现:
public void clear() {
modCount++;
Arrays.fill(table, null);
size = 0;
}
Run Code Online (Sandbox Code Playgroud)
这就是OpenJDK 8u40的外观:
public void clear() {
Node<K,V>[] tab;
modCount++;
if ((tab = table) != null && size > 0) {
size = 0;
for (int i = 0; i < tab.length; ++i)
tab[i] = null;
}
}
Run Code Online (Sandbox Code Playgroud)
我知道现在table为空地图可以为null,因此需要在局部变量中进行额外的检查和缓存.但为什么被Arrays.fill()for-loop取代?
似乎在此提交中引入了更改.不幸的是,我没有找到解释为什么普通for循环可能比更好Arrays.fill().它更快吗?还是更安全?