Хэш-карта в Java 8 сортирует по умолчанию?

1

Карта Java 8 Hash по умолчанию сортируется без реализации Comparable и Comparator.

Пример:

public static void main(String[] args) {

    Map<String,String> map = new HashMap<String, String>();

    map.put("ac", "ac");
    map.put("ab", "ab");
    map.put("ae", "ae");
    map.put("ad", "ad");
    map.put("az", "aa");


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

Java 8 OutPut (по умолчанию предоставляют сортировку по ключу)

ab:::::ab
ac:::::ac
ad:::::ad
ae:::::ae
az:::::aa

Выход Java 7

az:::::aa
ac:::::ac
ad:::::ad
ab:::::ab
ae:::::ae

Мой вопрос: это функция или ошибка в Java 8?

Теги:
collections

1 ответ

7
Лучший ответ

Такое поведение совершенно случайно. HashMap не предоставляет никаких гарантий порядка среди своих записей.

Фактически, просто добавляя map.put("zz", "zz"); приводит к тому, что результат больше не сортируется:

zz:::::zz
ab:::::ab
ac:::::ac
ad:::::ad
ae:::::ae
az:::::aa
  • 2
    но почему результат Java 7 отличается от Java 8?
  • 4
    Поскольку реализация этого изменилась (совместимым способом) в Java 8.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню