Встречается на 2% собеседований по Java

Всегда ли в Bucket связный список в HashMap

В Java 8 и выше HashMap использует гибридный подход: при малом количестве элементов (обычно до 8) бакет хранится как связный список, а при превышении порога преобразуется в сбалансированное дерево (красно-черное). Это сделано для защиты от атак через коллизии хэшей.

Пример структуры бакета:

java
// До Java 8 - всегда связный список
static class Entry<K,V> implements Map.Entry<K,V> {
    final K key;
    V value;
    Entry<K,V> next;
    // ...
}

// Java 8+ - может быть деревом
static final class TreeNode<K,V> extends LinkedHashMap.Entry<K,V> {
    TreeNode<K,V> parent;  
    TreeNode<K,V> left;
    TreeNode<K,V> right;
    // ...
}

Преобразование происходит при TREEIFY_THRESHOLD = 8 и обратно при UNTREEIFY_THRESHOLD = 6.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы