为什么HashMap.clear()方法不再使用Arrays.fill()来清空?

8 浏览
0 Comments

为什么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()更好的解释。它是更快吗?还是更安全?

0