Java 中的 Hash Map 默认有 8 种排序?
Hash Map in Java 8 sorts by default?
Java 8 Hash map默认排序,没有实现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
Java 8 Hash map默认排序,没有实现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