Порівняння TreeMap, HashMap та LinkedHashMap

Найчастіше використовують HashMap як втілення інтерфейсу Map внаслідок простоти використання і швидкого доступу до даних. Але інколи необхідно зберігати дані у структурованому вигляді для ефективної навігації. У такому випадку використовують TreeMap, що втілює інтерфейс NavigableMap, успадкований від SortedMap, а той, у свою чергу, від інтерфейсу Map — див. схему нижче, на якій чорними лініями вказано наслідування, а червоними — втілення.

         інтерфейс Map
     ┌───┘     │     └───┐
 інтерфейс             клас
 SortedMap           Hashtable
     │        клас
     │       HashMap
 інтерфейс     │
NavigableMap   │
             клас
         LinkedHashMap
    клас
  TreeMap

Втілюючи інтерфейси NavigableMap і SortedMap, TreeMap отримує додатковий функціонал, якого немає в HashMap. Але платою за це продуктивність. Час доступу до елементів TreeMap найтриваліший. Якщо не потрібно зберігати дані в упорядкованому вигляді, краще використати HashMap або LinkedHashMap.

Клас LinkedHashMap дозволяє зберігати дані у порядку додавання. Спільні й відмінні риси цих трьох класів подано такою таблицею.

HashMapLinkedHashMapTreeMap
Порядок
зберігання
даних.
Випадковий У порядку
додавання
У порядку
зростання
Час доступу
до елемента
O(1)O(1)O(log(n))
Імплементовані
інтерфейси
MapMapNavigableMap,
SortedMap, Map
Основа втілення
(структури даних)
Відра
(buckets)
Відра
(buckets)
Червоно-чорне
дерево
(Red-Black Tree)
Використання
ключа null
МожнаМожна Лише при
використанні
порівнювача,
що дозволяє null
Потоко-
безпечність
Ні Ні Ні

У цій таблиці використано такі поняття.

Проілюструємо дію пункту 5 на конкретному прикладі вилучення вершини висоти 1 з найменшою координатою з дерева, що має чорну висоту 3 і містить лише 14 чорних вершин (на схемах нижче їх позначено літерами латиниці), що не є листками.
    ┌──────G──────┐   
    C             M
   / \           / \
  /   \         /   \
 A     E       K     O
  \   / \     / \   / \
   B D   F   H   L N   P

           ↓

    ┌──────G──────┐  
   AC             M
   / \           / \
  /   \         /   \
 B     E       K     O
      / \     / \   / \
     D   F   H   L N   P

           ↓

    ┌──────G──────┐  
    C             M
   / \           / \
  /   \         /   \
 B     E       K     O
      / \     / \   / \
     D   F   H   L N   P