Проверяет понимание внутреннего устройства HashMap и причин недетерминированного порядка элементов.
HashMap — это структура данных, реализующая интерфейс Map. Она хранит пары ключ-значение и использует хеш-таблицу для быстрого доступа. Внутри HashMap содержит массив корзин (buckets). При добавлении элемента вычисляется хеш-код ключа, на основе которого определяется индекс корзины. Если в корзине уже есть элементы, возникает коллизия, и они хранятся в виде связного списка или сбалансированного дерева (при большом количестве коллизий).
Порядок элементов в HashMap зависит от нескольких факторов:
Например, при вставке элементов с ключами, имеющими разные хеши, они могут попасть в разные корзины. При расширении массива индексы меняются, и порядок обхода становится другим.
Map<String, String> map = new HashMap<>();
map.put("A", "1");
map.put("B", "2");
map.put("C", "3");
// Порядок может быть: A, C, B или B, A, C и т.д.
for (String key : map.keySet()) {
System.out.println(key);
}В этом примере порядок вывода ключей не гарантирован и может меняться при каждом запуске или после добавления новых элементов.
HashMap следует использовать, когда важен быстрый доступ по ключу, а порядок элементов не имеет значения. Если нужен предсказуемый порядок (например, порядок вставки), лучше использовать LinkedHashMap, а для сортировки — TreeMap.