檢查Java中兩個列表是否相等

1.簡介

在這篇簡短的文章中,我們將重點討論測試兩個List實例是否包含完全相同順序的相同元素的常見問題。

[List](https://docs.oracle.com/javase/8/docs/api/java/util/List.html)有序的數據結構,因此元素的順序取決於設計。

看看[List#equals](https://docs.oracle.com/javase/8/docs/api/java/util/List.html#equals-java.lang.Object-) Java文檔的摘錄:

…如果兩個列表包含相同順序的相同元素,則定義為相等。

此定義確保equals方法可在List接口的不同實現中正常工作。

我們可以在編寫斷言時使用這些知識。

在以下代碼段中,我們將使用以下列表作為示例輸入:

List<String> list1 = Arrays.asList("1", "2", "3", "4");

 List<String> list2 = Arrays.asList("1", "2", "3", "4");

 List<String> list3 = Arrays.asList("1", "2", "4", "3");

2. JUnit

在純JUnit測試中,以下斷言將成立:

@Test

 public void whenTestingForEquality_ShouldBeEqual() throws Exception {

 Assert.assertEquals(list1, list2);

 Assert.assertNotSame(list1, list2);

 Assert.assertNotEquals(list1, list3);

 }

3. TestNG

當使用TestNG的斷言時,它們的外觀與JUnit的斷言非常相似,但是必須注意Assert類來自不同的包:

@Test

 public void whenTestingForEquality_ShouldBeEqual() throws Exception {

 Assert.assertEquals(list1, list2);

 Assert.assertNotSame(list1, list2);

 Assert.assertNotEquals(list1, list3);

 }

4. AssertJ

如果您想使用AssertJ ,則其斷言如下所示:

@Test

 public void whenTestingForEquality_ShouldBeEqual() throws Exception {

 assertThat(list1)

 .isEqualTo(list2)

 .isNotEqualTo(list3);



 assertThat(list1.equals(list2)).isTrue();

 assertThat(list1.equals(list3)).isFalse();

 }

5.結論

在本文中,我們探討瞭如何測試兩個List實例是否包含相同順序的相同元素。這個問題最重要的部分是對List數據結構如何工作的正確理解。

所有代碼示例都可以在GitHub找到