Java8中的哈希映射默认排序?

Java8中的哈希映射默认排序?,java,collections,Java,Collections,默认情况下,Java8哈希映射是排序,而不实现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

默认情况下,Java8哈希映射是排序,而不实现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());
    }
}
Java7输出

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

我的问题是:这是Java 8中的一个特性还是一个bug?

这种行为完全是偶然的
HashMap
不保证其条目之间的顺序

事实上,只需添加
map.put(“zz”,“zz”)导致结果不再排序:

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

但是为什么java 7的结果与java 8不同呢?因为它的实现在java 8中发生了变化(以兼容的方式)。我对不同平台(OSX和Windows)上的集合有类似的行为。我学会了看API规范,而不是结果!
zz:::::zz
ab:::::ab
ac:::::ac
ad:::::ad
ae:::::ae
az:::::aa