为什么Java中的HashMap <k,v>按顺序迭代?

时间:2015-09-25 09:44:11

标签: java hashmap

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}}

3 个答案:

答案 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)

是。你遇到了这种情况。但不像医生说的那样保证。如果您继续添加和删除加班,订单将会改变。

  

此课程不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。