Java 8 HashMap KeySet()输出不同于Java 7
问题描述:
我从Java 7升级到Java 8,并注意到在使用HashMap的keySet()的地方发生Junit失败。Java 8 HashMap KeySet()输出不同于Java 7
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]
任何帮助?
答
Set
不保证元素的顺序。如果你需要订购hashmap,你可以使用LinkedHashMap
答
如果你想保留插入顺序,建议使用LinkedHashMap
。
HashMap
的订单没有定义,也不一致。即相同的键可以以不同的顺序出现。 HashMap的实现在Java 7和Java 8之间有了很大的变化,所以您应该期望在某些情况下订单有所不同。
答
HashMap
不保证密钥的顺序。如果您的Junit测试依赖于密钥的顺序,那么它的设计不正确。
'Set'和'Map'是按照定义的非订购集合。在这两种情况下输出都是正确的。 – Crozin
你写的JUNIT测试用例是什么?在HashMap/Set中不保证顺序,如果需要保证顺序,可以尝试TreeSet。 –
'“var1”.toUpperCase()'应该是'VAR1'而不是'var1' –