Что такое альтернативное хеширование для клавиш String в Java 8?

Java 8 предоставляет альтернативное хеширование для клавиш String для повышения производительности, когда встречается большое количество коллизий ключевых хеш-кодов. Может ли кто-нибудь объяснить, что это такое и как он будет работать?

Ответ 1

От это письмо [email protected]:

  • Введен новый интерфейс Hashable32.
  • Hashable32 предоставляет метод hash32()
  • String реализует метод Hashable32 и hash32()
  • HashMap и другие распознают String и вызывают hash32(), а не hashCode()

Изменения кода:

Ответ 2

Чтобы придать большее значение этому вопросу, альтернативное хэширование было удалено из JDK 8. Проверьте:

http://docs.oracle.com/javase/8/docs/technotes/guides/collections/changes8.html

http://openjdk.java.net/jeps/180

Интересно отметить, что после того, как количество элементов в хэш-ведре вырастет выше определенного порога, это ведро переключится с использования связанного списка записей в сбалансированное дерево.

Функция хэша (Object key) в HashMap была пересмотрена следующим образом без специального обращения к объектам String:

static final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}