疲れたらやすむ

Javaを学ぶ上でハマったところを書いていきます。iPhoneアプリ開発や日常ネタもあるかも。

【Java】Listの比較

今回はListの比較に関する記事になります。
List同士を比較し、格納されている内容が等しいかを判断します。
格納順序も判断材料となるため、同じ値が入っていてもインデックスが一致しない場合はfalseが返ります。

ソース

List<String> listA = new ArrayList<String>();
listA.add("a");
listA.add("b");
listA.add("c");

List<String> listB = Arrays.asList("a", "b", "c");

List<String> listC = null;

// 1.equals
boolean result1 = listA.equals(listB);

// 2.Objects.equals
boolean result2 = Objects.equals(listA, listB);

// 3.nullの比較
boolean result3 = Objects.equals(listC, listB);

System.out.println("1 " + result1);
System.out.println("2 " + result2);
System.out.println("2 " + result3);

実行結果

1 true
2 true
3 false

1はequalsで比較しています。
Stringなんかはこのequalsで比較するのが一般的でしょうか。
Listでも同じように比較することが可能です。

2、3はObjects.equals。
基本的にはequalsと変わりません。
こちらはnullを比較対象にしてもExceptionが発生しない分使い勝手は良いです。


ちょっと似たようなところでcontainsメソッドもご紹介。
List同士の比較ではないですが、リストの中を対象のオブジェクトで検索することが可能です。

ソース

List<String> listA = Arrays.asList("a", "b", "c");

System.out.println(listA.contains("b"));

実行結果

true

Listの中に「b」が存在するためtrueが返ります。
Mapでも似たようなものがあるので覚えておいて損はありません。


あとはピンポイントで使えそうなもの。
2つのリストを比較し、差分があるもの取得します。

ソース

List<String> listA = Arrays.asList("a", "c");
List<String> listB = Arrays.asList("a", "b", "c");

Collection<String> result = CollectionUtils.subtract(listB, listA);
for (String s : result) {
	System.out.println(s);
}

実行結果

b

CollectionUtilsをインポートしないと使えません。
コチラからapache.common.collectionsのjarをダウンロードして使ってください。

subtractメソッドは第1引数のListから第2引数のListの中身を削除していきます。
つまりlistBからlistAの内容を引いたものがresultに代入されます。
引数の順番には気をつけないといけません。
上記コードの場合は、引数を逆にしてしまうとresultには何も残らないので一見差分がないように思えちゃいます。

今回は以上になります。