Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
リスト.contains() / indexOf() / subList()
リストに特定の要素が含まれているかどうかを確認したり、要素の位置を取得したり、リストの一部を切り出したりするメソッドです。検索と部分参照はリスト操作の基本です。
構文
// 要素が含まれているかどうかを返します。 リスト.contains(Object o); // 最初に一致した要素のインデックスを返します。 リスト.indexOf(Object o); // 最後に一致した要素のインデックスを返します。 リスト.lastIndexOf(Object o); // 指定した範囲のビュー(部分リスト)を返します。 リスト.subList(int fromIndex, int toIndex);
メソッド一覧
| メソッド | 概要 |
|---|---|
| contains(Object o) | リストに指定した要素が含まれている場合は true、そうでない場合は false を返します。 |
| indexOf(Object o) | 指定した要素が最初に現れるインデックスを返します。見つからない場合は -1 を返します。 |
| lastIndexOf(Object o) | 指定した要素が最後に現れるインデックスを返します。見つからない場合は -1 を返します。 |
| subList(int fromIndex, int toIndex) | fromIndex から toIndex の直前までの要素を参照する部分リストのビューを返します。 |
サンプルコード
import java.util.ArrayList;
import java.util.Arrays;
ArrayList<String> fruits = new ArrayList<>(Arrays.asList("apple", "banana", "cherry", "banana"));
// contains() で要素の存在を確認します。
System.out.println(fruits.contains("banana")); // 『true』と出力されます。
System.out.println(fruits.contains("grape")); // 『false』と出力されます。
// indexOf() で最初の出現位置を取得します。
System.out.println(fruits.indexOf("banana")); // 『1』と出力されます。
System.out.println(fruits.indexOf("grape")); // 『-1』と出力されます。
// lastIndexOf() で最後の出現位置を取得します。
System.out.println(fruits.lastIndexOf("banana")); // 『3』と出力されます。
// subList() で部分リストを取得します。
java.util.List<String> sub = fruits.subList(1, 3); // インデックス1〜2を取得します。
System.out.println(sub); // 『[banana, cherry]』と出力されます。
// subList() は元のリストのビューなので変更が反映されます。
sub.clear(); // 部分リストを空にすると元のリストからも削除されます。
System.out.println(fruits); // 『[apple, banana]』と出力されます。
// containsAll() で複数の要素をまとめて確認します。
ArrayList<String> check = new ArrayList<>(Arrays.asList("apple", "grape"));
System.out.println(fruits.containsAll(check)); // 『false』と出力されます。
概要
『contains()』と『indexOf()』はどちらも内部的に先頭から順に比較するため、O(n)の計算量がかかります。大量のデータに対して頻繁に検索を行う場合は、HashSet や HashMap の使用を検討してください。
『subList()』が返すのは独立したコピーではなくビュー(元のリストへの参照)です。部分リストに対する変更(set(), clear() など)は元のリストにも反映されます。独立したコピーが必要な場合は new ArrayList<>(list.subList(...)) のようにして別のリストとして保存してください。
要素の追加・取得には『add() / get()』、リストの並べ替えには『Collections.sort()』を使用してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。