【问题标题】:JUnit order of LinkedHashMap Java 8LinkedHashMap Java 8的JUnit顺序
【发布时间】:2016-10-27 14:33:11
【问题描述】:

我需要检查两张地图是否完全相等,包括它们的顺序

@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 保持插入顺序。为什么两个相同但不同的有序映射的断言是真的? 如果平等的顺序很重要,我应该采取什么地图?

【问题讨论】:

  • 保持插入顺序进行迭代***.

标签: java junit


【解决方案1】:

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

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

如果您想断言相同的迭代顺序,您可以将两个迭代复制到列表中并比较列表。

【讨论】:

  • 如果您想确保相同的订单,您需要不同的地图类型!
猜你喜欢
  • 2012-12-28
  • 2020-09-02
  • 2011-03-29
  • 1970-01-01
  • 2011-11-02
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
相关资源
最近更新 更多