Ответ
LinkedHashMap сохраняет порядок итерации по элементам, который по умолчанию соответствует порядку вставки (insertion-order).
Ключевые особенности:
- Порядок вставки: Элементы перебираются в том порядке, в котором они были добавлены в карту.
- Порядок доступа (LRU-подобный): При создании с флагом
accessOrder = trueпорядок итерации меняется при каждом обращении (get,put). Последний использованный элемент перемещается в конец. - Реализация: Расширяет
HashMap, добавляя двусвязный список для поддержания порядка.
Пример 1: Порядок вставки (по умолчанию)
Map<String, Integer> map = new LinkedHashMap<>();
map.put("z", 1);
map.put("a", 2);
map.put("m", 3);
for (String key : map.keySet()) {
System.out.print(key + " "); // Вывод: z a m
}
Пример 2: Порядок доступа (LRU)
// Третий параметр `true` включает режим порядка доступа
Map<String, Integer> lruMap = new LinkedHashMap<>(16, 0.75f, true);
lruMap.put("a", 1);
lruMap.put("b", 2);
lruMap.put("c", 3);
lruMap.get("a"); // Обращение к "a" перемещает её в конец
for (String key : lruMap.keySet()) {
System.out.print(key + " "); // Вывод: b c a
}
Это поведение полезно для создания простых LRU-кэшей (Least Recently Used).