Javaで2つのリストが等しいかどうかを確認

Javaで2つのリストが等しいかどうかを確認する

1. 前書き

この短い記事では、2つのListインスタンスにまったく同じ順序で同じ要素が含まれているかどうかをテストするという一般的な問題に焦点を当てます。

Listorderedデータ構造であるため、要素の順序は設計上重要です。

List#equalsJavaドキュメントからの抜粋をご覧ください。

…同じ要素が同じ順序で含まれている場合、2つのリストは等しいと定義されます。

この定義は、equalsメソッドがListインタフェースの異なる実装間で正しく機能することを保証します。

アサーションを作成するときにこの知識を使用できます。

次のコードスニペットでは、次のリストを入力例として使用します。

List list1 = Arrays.asList("1", "2", "3", "4");
List list2 = Arrays.asList("1", "2", "3", "4");
List list3 = Arrays.asList("1", "2", "4", "3");

2. JUnit

純粋なJUnitテストでは、次のアサーションがtrueになります。

@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. 結論

この記事では、2つのListインスタンスに同じ要素が同じ順序で含まれているかどうかをテストする方法について説明しました。 この問題の最も重要な部分は、Listデータ構造がどのように機能するように設計されているかを正しく理解することでした。

すべてのコード例はGitHubにあります。