01. Внутренняя работа над улучшением HashMap и Java-8

YOUTUBE · 25.11.2025 06:15

Ключевые темы и таймкоды

Введение в хэш-карты

0:00
  • Хэш-карты создаются в памяти кучи JVM.
  • JVM создает 16 сегментов для хранения элементов.
  • Если хэш-карта заполнена более чем на 75%, её ёмкость удваивается.

Ведра и связанный список

1:34
  • Ведро хэш-карты представляет собой связанный список.
  • Узел связанного списка содержит данные и указатель на следующий узел.
  • Узлы добавляются в связанный список один за другим.

Добавление пары ключ-значение

4:06
  • Хэш-карта используется для хранения пар ключ-значение.
  • JVM получает хэш-код ключа и вычисляет индекс корзины.
  • Если ключ уже присутствует в корзине, происходит коллизия хэшей.

Коллизия хэшей

6:36
  • Коллизия хэшей возникает, если ключ уже присутствует в корзине.
  • JVM проверяет, существует ли ключ, и заменяет существующий узел.
  • Хэш-карты не могут содержать дубликаты ключей.

Метод get

10:23
  • Метод get возвращает значение очень быстро.
  • JVM находит хэш-код ключа и индекс корзины.
  • Если ключ найден, возвращается пара ключ-значение.

Проблемы с хэш-картой

13:31
  • Хэш-карта не должна содержать несколько узлов в одной корзине.
  • При наличии нескольких узлов в корзине производительность снижается.
  • В Java 8 разработчики улучшили хэш-карту, чтобы повысить производительность.

Преобразование в дерево

15:00
  • При достижении определенного порога узлов связанный список преобразуется в дерево.
  • Порог называется "три-пять".
  • Дерево используется для повышения производительности при поиске элементов.

Пример работы дерева

15:56
  • Дерево хранит элементы в порядке возрастания или убывания.
  • Пример: узлы с целыми значениями 1, 4, 6, 2, 7, 3, 5, 1.
  • Дерево позволяет быстро находить нужные узлы, избегая перебора всех узлов.

Преимущества дерева

16:48
  • Дерево позволяет JVM быстро находить нужные узлы.
  • JVM использует метод compareTo для сравнения объектов.
  • Дерево также называется красно-черным деревом и деревом бинарного поиска.

Заключение

18:25
  • При достижении порога узлов связанный список преобразуется в дерево.
  • JVM использует метод compareTo для сравнения объектов.
  • В следующем видео будут рассмотрены практические вопросы по хэш-карте и контракт equals и метод хэш-кода.