Java 8 HashMap KeySet()输出与Java 7不同

时间:2016-08-01 09:13:07

标签: java hashmap java-8

我从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]

对此有何帮助?

4 个答案:

答案 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,在这里学习差异。