В каком порядке возвращаются элементы при вызове entrySet() у Map в Java?

«В каком порядке возвращаются элементы при вызове entrySet() у Map в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Порядок элементов entrySet() зависит от конкретной реализации Map:

  • HashMapне гарантирует никакого порядка. Порядок может меняться при изменении размера таблицы.
  • LinkedHashMap — элементы возвращаются в порядке добавления (по умолчанию) или в порядке последнего доступа (при использовании конструктора с accessOrder=true).
  • TreeMap — элементы отсортированы по естественному порядку ключей (ключи должны реализовывать Comparable) или согласно переданному Comparator.

Пример с TreeMap:

Map<String, Integer> map = new TreeMap<>();
map.put("banana", 2);
map.put("apple", 1);
map.put("cherry", 3);

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue());
}
// Вывод: apple: 1, banana: 2, cherry: 3

Почему это важно? Выбор реализации Map напрямую влияет на порядок итерации, что критично для логики, зависящей от последовательности элементов.