Карта 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?
Такое поведение совершенно случайно. HashMap
не предоставляет никаких гарантий порядка среди своих записей.
Фактически, просто добавляя map.put("zz", "zz");
приводит к тому, что результат больше не сортируется:
zz:::::zz
ab:::::ab
ac:::::ac
ad:::::ad
ae:::::ae
az:::::aa