Зачем LinkedList в бакете преобразуется в TreeMap при большом количестве элементов

«Зачем LinkedList в бакете преобразуется в TreeMap при большом количестве элементов» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java 8 HashMap оптимизирована для случаев коллизий. При достижении определенного порога элементов в одном бакете (по умолчанию 8), LinkedList преобразуется в TreeMap (красно-черное дерево). Это улучшает производительность поиска с O(n) до O(log n). Обратное преобразование (в LinkedList) происходит при уменьшении элементов до 6 (гистерезис для избежания частых преобразований).

Пример порогов:

static final int TREEIFY_THRESHOLD = 8;
static final int UNTREEIFY_THRESHOLD = 6;

Причина: LinkedList эффективен для малых данных, но при росте количества элементов TreeMap обеспечивает лучшую производительность. Условие - ключи должны реализовывать Comparable.