我从Java 7升级到Java 8,并注意到在使用HashMap的keySet()的地方出现了Junit失败。
Map<String, String> map = new HashMap<String, String>();
map.put("var1".toUpperCase(), "var");
map.put("var".toUpperCase(), "var1");
Set<String> varKeys = replacementMap.keySet();
在Java 7中:
varKeys=[VAR,VAR1]
在Java 8中:
varKeys=[VAR1,VAR]
对此有何帮助?
答案 0 :(得分:15)
HashMap
不保证密钥的顺序。如果你的Junit测试依赖于键的顺序,那么它的设计是错误的。
答案 1 :(得分:6)
如果您想保留广告订单,建议您使用LinkedHashMap
。
HashMap
的顺序未定义且不一致。即相同的键可以以不同的顺序出现。 HashMap的实现在Java 7和Java 8之间发生了显着的变化,所以在某些情况下你应该期望顺序不同。
答案 2 :(得分:3)
Set
不保证元素的顺序。如果您需要有序的hashmap,可以使用LinkedHashMap
答案 3 :(得分:3)
这是一个HashSet / HashMap,订单永远不会得到保证,并且可以随时更改。你想要的是TreeSet or LinkedHashSet,在这里学习差异。