public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(8, "B");
map.put(7, "C");
map.put(5, "A");
map.put(10, "Z");
map.put(3, "D");
map.put(1, "B");
System.out.println(map);
printCollection(map);
}
private static void printCollection(Map<Integer, String> map) {
for(Map.Entry<Integer, String> pair : map.entrySet()){
System.out.println(pair.getKey() + " " + pair.getValue());
}
}
始终返回按键排序的值,尽管文档说它无法保证:
1 B
3 D
5 A
7 C
8 B
10 Z
输出: {1 = B,3 = D,5 = A,7 = C,8 = B,10 = Z}
{{1}}
答案 0 :(得分:2)
&#34;不保证&#34;并不意味着&#34;永远不会&#34;。可能你只是运气好,你不应该依赖它。
如果你想要一个有序的HashMap,你应该使用LinkedHashMap
。
答案 1 :(得分:1)
您正在使用一小组密钥进行测试。 HashMap的默认大小为16,因此它按顺序存储并发回。
使用默认初始容量(16)和默认加载因子(0.75)构造一个空的HashMap。
hashcode
的{{1}}是值本身,因此它们将存储在每个存储桶中。
尝试这个简单的代码并查看输出:
Integer
<强>输出:强>
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 16 19 18 21 20 23 22 25 24 27 26 29 28 31 30 34 35 32 33 38 39 36 37 42 43 40 41 46 47 44 45 51 50 49 48 55 54 53 52 59 58 57 56 63 62 61 60 68 69 70 71 64 65 66 67 76 77 78 79 72 73 74 75 85 84 87 86 81 80 83 82 93 92 95 94 89 88 91 90 98 99 96 97
直到15个键被排序,但随后它们开始随机传播。
答案 2 :(得分:0)
是。你遇到了这种情况。但不像医生说的那样保证。如果您继续添加和删除加班,订单将会改变。
此课程不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。