← Назад к вопросам

По чему будут отсортированы элементы, если получить entrySet

1.6 Junior🔥 31 комментариев
#Stream API и функциональное программирование

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Сортировка элементов в entrySet() различных Map реализаций

Это классический вопрос про Collections Framework в Java. Ответ полностью зависит от типа Map'а, который вы используете. Разберу все основные реализации.

Краткий ответ

Порядок зависит от типа Map'а:

  • HashMap: не гарантирует порядок (неопределённый)
  • LinkedHashMap: порядок вставки (insertion order) или последний доступ (access order)
  • TreeMap: отсортирован по ключам (natural order или custom comparator)
  • ConcurrentHashMap: не гарантирует порядок
  • WeakHashMap: не гарантирует порядок
  • IdentityHashMap: не гарантирует порядок

1. HashMap — нет гарантий

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

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry);
}

2. LinkedHashMap — insertion order (по умолчанию)

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

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry);
}

3. LinkedHashMap — access order (LRU Cache)

LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>(16, 0.75f, true) {
    @Override
    protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > 3;
    }
};

map.put("zebra", 1);
map.put("apple", 2);
map.put("banana", 3);
Integer value = map.get("apple");

4. TreeMap — отсортирован по ключам

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

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry);
}

5. ConcurrentHashMap — нет гарантий

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

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry);
}

Таблица сравнения

Map типПорядокБыстротаИспользование
HashMapНетO(1)Стандартный выбор
LinkedHashMapInsertionO(1)Когда нужен порядок вставки
TreeMapSortedO(log n)Отсортированные ключи
ConcurrentHashMapНетO(1)Multi-threaded

Выводы

  1. HashMap — стандартный выбор, когда порядок не важен
  2. LinkedHashMap — когда нужен порядок вставки или LRU кэш
  3. TreeMap — когда нужны отсортированные ключи (медленнее)
  4. ConcurrentHashMap — когда нужна многопоточность
  5. ВСЕГДА указывайте type of Map в API — не оставляйте порядок на удачу
По чему будут отсортированы элементы, если получить entrySet | PrepBro