LinkedBashMap Java 8的JUnit顺序

时间:2016-10-27 14:33:11

标签: java junit

我需要检查两张地图的完全相等,包括他们的订单

@Test
    public void test(){
        Map<String, Integer> actual = new LinkedHashMap<>();
        actual.put("longer", 1);
        actual.put("first", 1);
        actual.put("thebiggest", 1);

        Map<String, Integer> expected = new LinkedHashMap<>();
        expected.put("thebiggest", 1);
        expected.put("longer", 1);
        expected.put("first", 1);

        System.out.println("===expected");
        expected.entrySet().stream().forEach(n->System.out.println(n.getKey()));
        System.out.println("===actual");
        actual.entrySet().stream().forEach(n->System.out.println(n.getKey()));

        assertEquals(expected, actual);
        assertTrue(expected.equals(actual));
    }

所有测试都通过了,输出在控制台中:

===expected
thebiggest
longer
first
===actual
longer
first
thebiggest

文档中的任何地方都写有LinkedHashMap保持插入顺序。为什么断言两个相同但不同的有序地图给出了真实? 如果平等秩序很重要,我应该采取什么样的地图?

1 个答案:

答案 0 :(得分:2)

definition of equals for a Map是他们拥有相同的条目集,无论顺序如何。

  

将指定对象与此映射进行相等性比较。如果给定对象也是一个映射,并且两个映射表示相同的映射,则返回true。更正式地说,如果m1.entrySet()。equals(m2.entrySet()),则两个映射m1和m2表示相同的映射。这可以确保equals方法在Map接口的不同实现中正常工作。

如果要声明相同的迭代顺序,可以将两个迭代复制到列表中并比较列表。