Javaでは、list内の要素を検索する方法として、大きくindexOfメソッドを利用する方法とcontainsメソッドを利用する方法が挙げられます。
本記事では、2つのメソッドの使い方を解説しながら、それぞれのメソッドの違いについてご紹介していきます。
目次
Javaでlist内の要素を特定するならindexOfで検索
まずJavaのlistで要素のインデックス番号を検索する方法として「indexOf」メソッドを利用することが可能です。
indexOfメソッド
indexOfメソッドは、引数に検索した要素を指定することで、返り値として最初に見つかったインデックス番号が返却されます。
package test; import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList strList = new ArrayList(); strList.add("いぬ"); // インデックス番号0 strList.add("ねこ"); // インデックス番号1 strList.add("とり"); // インデックス番号2 strList.add("ねこ"); // インデックス番号3 strList.add("さる"); // インデックス番号4 strList.add("とり"); // インデックス番号5 System.out.println(strList.indexOf("ねこ")); } }
実行した結果は下記の通りです。
1
インデックス番号は「0」から数えるため、今回の場合2つ目の値、つまりインデックス番号「1」が値として返却されています。
lastIndexOfメソッド
リストから特定の要素を検索する方法として、「lastIndexOf」メソッドを利用することも可能です。
lastIndexOfメソッドを利用する場合、後ろから数えて何番目のインデックス番号で見つかったかを返却します。
package test; import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList strList = new ArrayList(); strList.add("いぬ"); // インデックス番号0 strList.add("ねこ"); // インデックス番号1 strList.add("とり"); // インデックス番号2 strList.add("ねこ"); // インデックス番号3 strList.add("さる"); // インデックス番号4 strList.add("とり"); // インデックス番号5 System.out.println(strList.lastIndexOf("ねこ")); } }
実行した結果が下記の通りです。
3
検索対象の「ねこ」は、インデックス番号「1」と「3」に格納されていますが、lastIndexOfメソッドを利用した場合、後ろから検索をスタートするため、返却値は「3」となります。
lastIndexOfメソッドを利用した場合でも、返却されるインデックス番号は後ろから数えた値ではありません。
あくまで検索開始が後ろからというだけで、格納されているインデックス番号は前からの検索時と変わらない点を意識しておきましょう。
Javaでlist内に要素が存在するかはcontainsで検索
続いてJavaのlist内に要素が存在するかの確認には「contains」メソッドを利用することが可能です。
containsメソッド
containsメソッドでは引数に設定した値が存在するか否かを「true」「false」で返却します。
package test; import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList strList = new ArrayList(); strList.add("いぬ"); strList.add("ねこ"); strList.add("とり"); strList.add("ねこ"); strList.add("さる"); strList.add("とり"); System.out.println(strList.contains("ねこ")); } }
実行した結果が下記となります。
true
indexOfメソッドでは、要素のインデックス番号まで特定することが出来ましたが、containsメソッドの場合には引数に指定した値がリスト内に1つでも存在すれば「true」、存在しなければ「false」が返却されます。
containsAllメソッド
containsAllメソッドでは、検索元のリストに引数で設定したリストの値が全て含まれる場合のみ「true」、それ以外は「false」を返却します。
package test; import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList strList = new ArrayList(); strList.add("いぬ"); strList.add("ねこ"); strList.add("とり"); strList.add("ねこ"); strList.add("さる"); strList.add("とり"); ArrayList searchList1 = new ArrayList(); searchList1.add("ねこ"); searchList1.add("とり"); ArrayList searchList2 = new ArrayList(); searchList2.add("ねこ"); searchList2.add("うま"); System.out.println("serachList1の検索結果: " + strList.containsAll(searchList1)); System.out.println("serachList2の検索結果: " + strList.containsAll(searchList2)); } }
実行した結果が下記の通りです。
serachList1の検索結果: true serachList2の検索結果: false
複数の要素をまとめて検索したい場合などには、containsAllメソッドを使って作成した検索用のコレクションクラスを一括で検索する方法が便利です。
さいごに:Javaのlist操作を理解して要素を適切に検索しよう!
本記事では、Javaのlistに格納された要素を検索する方法についてご紹介してきました。
listの検索には大きく「indexOf」メソッドと「contains」メソッドの利用が可能です。
どちらのメソッドを利用するかについては、検索結果をどのようにプログラムで利用するのか判断して、適切なメソッドを利用するようにしましょう。
検索対象の値が見つからなかった場合には、「-1」が返却されます。
リストの検索は文字列だけでなく、様々な型で利用可能です。