Java - 2つのリストが同じかどうかを比較

2つのリスト(ArrayList)が同じかどうかを比較する方法を紹介します。 2つのリストが同じであることは、リストの長さが同じで、すべて同じ要素を持っていることを意味します。

1. ArrayList.equals()でリストが同じかどうかを比較

ArrayList.equals() は、リストが引数として渡されたリストと長さが同じで同じ要素を持っているときに true を返します。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Example1 {

    public static void main(String[] args) {

        List<String> list1 = new ArrayList<>(Arrays.asList("a", "b", "c", "d"));
        List<String> list2 = new ArrayList<>(Arrays.asList("a", "b", "c"));
        List<String> list3 = new ArrayList<>(Arrays.asList("a", "b", "c", "d"));

        System.out.println("list1 == list2 : " + list1.equals(list2));
        System.out.println("list1 == list3 : " + list1.equals(list3));
    }
}

Output:

list1 == list2 : false
list1 == list3 : true

ArrayList.java に実装された equals() を見ると以下のように長さと要素を確認しています。

public boolean equals(Object o) {
    if (o == this)
        return true;
    if (!(o instanceof List))
        return false;

    ListIterator<E> e1 = listIterator();
    ListIterator<?> e2 = ((List<?>) o).listIterator();
    while (e1.hasNext() && e2.hasNext()) {
        E o1 = e1.next();
        Object o2 = e2.next();
        if (!(o1==null ? o2==null : o1.equals(o2)))
            return false;
    }
    return !(e1.hasNext() || e2.hasNext());
}

2. ArrayList.containsAll() でリストが同じかどうかを比較

明示的にリストの長さが等しいか比較し、 containsAll() を利用してリストの要素が他のリストにすべて含まれているかどうかを確認して同じか比較できます。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Example {

    public static boolean isSameList(List<String> list1, List<String> list2) {
        return (list1.size() == list2.size()) && list1.containsAll(list2);
    }

    public static void main(String[] args) {

        List<String> list1 = new ArrayList<>(Arrays.asList("a", "b", "c", "d"));
        List<String> list2 = new ArrayList<>(Arrays.asList("a", "b", "c"));
        List<String> list3 = new ArrayList<>(Arrays.asList("a", "b", "c", "d"));

        System.out.println("list1 == list2 : " + isSameList(list1, list2));
        System.out.println("list1 == list3 : " + isSameList(list1, list3));
    }
}

Output:

list1 == list2 : false
list1 == list3 : true

Related Posts

codechachaCopyright ©2019 codechacha