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
- Java - AtomicReference使用方法
- Java - CountDownLatchを使用する方法、および例
- Java - ScheduledThreadPoolExecutor使用方法
- Java - SummaryStatisticsの使用方法(count、min、max、average)
- Java8 - 関数型インタフェース (Functional Interface) について
- Java - String配列をint配列に変換する
- Java - ArrayList要素の値を変更する方法、replaceAll()
- Java - 2つのリストが同じかどうかを比較
- Java - 配列から特定のIndex要素を削除する3つの方法
- Java - HashMapソート、4つの方法
- Java - 文字列を配列に変換する方法
- Java - ArrayListが空であることを確認する3つの方法
- Java - ArrayListの巡回、4つの方法
- Java - ArrayListの最大値、最小 値を見つける
- Java - ArrayListの合計、平均値の計算
- Java - HashMap巡回、3つの方法
- Java - do whileとwhileの違い
- Java - Lambda式と関数型インタフェース
- Java - List empty(null)チェック、3つの方法
- Java - ArrayListの初期化、4つの方法
- Java - Stream.reduce()の使い方と例
- Java - 2つのマップを結合する(merge、putAll)
- Java - java.util.Dateをjava.sql.Dateに変換する
- Java - ArrayListをStringに変換する
- Java - ClassNotFoundExceptionの発生原因と解決策
- Java - 非静的メソッドは静的コンテキストから参照できません
- Java - NoSuchMethodErrorの原因と解決策
- Java - JSONライブラリを使用する方法(JSONObject、JSONArray)
- Java - byte[]配列をFileに保存
- Java - byte[]の配列をStringに変換
- Java - ファイルのアクセス権を確認し、変更
- Java - 一時フォルダ(Temp directory)パスを取得する
- Javaでシェルスクリプトを実行
- Java - Streamを配列に変換する
- Java - リスト重複排除、2つの方法