Я заметил что-то странное в реализации HashMap.clear()
. Вот как он выглядел в OpenJDK 7u40:
public void clear() {
modCount++;
Arrays.fill(table, null);
size = 0;
}
И вот как выглядит 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;
}
}
Я понимаю, что теперь table
может быть пустым для пустой карты, поэтому требуется дополнительная проверка и кэширование в локальной переменной. Но почему заменить Arrays.fill()
на цикл for?
Кажется, что изменение было введено в this commit. К сожалению, я не нашел объяснений, почему простой цикл может быть лучше, чем Arrays.fill()
. Это быстрее? Или безопаснее?