Java 8中的哈希映射默认排序?

Kru*_*tel 2 java collections

默认情况下,Java 8哈希映射是在不实现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());
    }
}
Run Code Online (Sandbox Code Playgroud)

Java 8 OutPut(默认提供按键排序)

ab:::::ab
ac:::::ac
ad:::::ad
ae:::::ae
az:::::aa
Run Code Online (Sandbox Code Playgroud)

Java 7输出

az:::::aa
ac:::::ac
ad:::::ad
ab:::::ab
ae:::::ae
Run Code Online (Sandbox Code Playgroud)

我的问题是:这是Java 8中的一个功能还是一个错误?

aio*_*obe 8

这种行为完全是偶然的.HashMap不对其条目中的订单提供任何保证.

实际上,只是添加map.put("zz", "zz");导致结果不再排序:

zz:::::zz
ab:::::ab
ac:::::ac
ad:::::ad
ae:::::ae
az:::::aa
Run Code Online (Sandbox Code Playgroud)

  • 因为它的实现在Java 8中以(以兼容的方式)改变了. (4认同)
  • 但是为什么Java 7的结果不同于Java 8? (2认同)