java – 在LinkedHashSet中对顺序进行Junit测试

参见英文答案 > LinkedHashSet .equals() vs LinkedList .equals() with same elements but different order                                    2个
>            JUnit order of LinkedHashMap Java 8                                    1个
我正在尝试编写一个Junit测试,该测试应测试两个LinkedHashSets中的元素顺序是否相同.以下是我现有的代码:

Assert.assertEquals(
            Sets.newLinkedHashSet(Arrays.asList("a","d","c","b")),
            conf.getSetInfo()
    );  

即使我给它比较a,d,c,b与a,b,c,d并且因此不考虑元素的排序,这个测试也是成功的.
我怎样才能根据订单进行断言?

解决方法:

比较两个列表是否相等时,会考虑元素的顺序.因此,只需将原始的LinkedHashSet转换为List以进行断言.

List<String> expected = Arrays.asList("a", "d", "c", "b");        
Assert.assertEquals(
   expected,
   new ArrayList<>(conf.getSetInfo())
);

LinkedHashSet是一个Set(尽管有一个保证迭代顺序),因此在equals()实现中忽略了排序. Further reading.

上一篇:Java 之 LinkedHashSet 集合


下一篇:HashSet,LInkedHashSet,TreeSet比较与解读——JAVA