Javaにおいて、listにデータを保持する処理は頻繁に利用され、list内に特定の要素が存在するかを調べる作業も同じく頻出処理の1つと言えます。
本記事では、listに特定要素が含まれるかを確認出来る「contains」メソッドの使い方をサンプルコードを掲載しながら詳しく解説していきたいと思います。
目次
Javaのlistとcontainsメソッドについて
実際の使い方をご紹介していく前に、listとcontainsについて基本情報を事前知識としてご紹介しておきます。
list
Javaのlistは一般的に、「list」インターフェースを実装するクラスのことを意味しています。
listインターフェースを単独で利用することは出来ず、実装という形でコレクションクラスを定義する必要があります。
listは、配列に似た複数の値を操作・保持することが出来ますが、配列とは異なり大きさを決めずに利用することが可能です。
listインターフェースを実装するクラスには「ArrayList」「LinkedList」など、いくつかのクラスが提供されています。
contains
containsは、listインターフェースを実装したクラスで利用可能なメソッドで、定義されたlist内に特定の要素が存在するかどうかを調べることが可能です。
containsメソッドに指定した要素が存在する場合には「true」、存在しない場合には「false」を返却します。
containsメソッドでlistの特定要素を調べる方法
では実際にcontainsメソッドの使い方をサンプルコードを通じて確認していきます。
基本構文
containsメソッドの基本構文は下記の通りです。
作成したlist型のインスタンスでcontainsメソッドを定義し、引数として検索したい要素を指定します。
List<データ型> インスタンス名 = new ArrayList<データ型>(); インスタンス名.add("テスト"); System.out.println(インスタンス名.contains("テスト")); // 出力結果はtrue System.out.println(インスタンス名.contains("サンプル")); // 出力結果はfalse
list型のインスタンスを生成し、addメソッドで「テスト」の文言を追加しています。
containsメソッドでは、引数に指定した値がlistに含まれるかをチェックするため、最初の出力結果は「true」、2つ目は「false」が出力されます。
サンプル
では実際にサンプルコードで、どのように利用されるのか確認してみましょう。
package test; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<String> list1 = new ArrayList<String>(); list1.add("1"); list1.add("2"); list1.add("3"); list1.add("あ"); list1.add("い"); list1.add("う"); List<String> list2 = new ArrayList<String>(); list2.add("1"); list2.add("い"); for(String word: list2) { if(list1.contains(word)) { System.out.println(word); } } } }
実行した結果は下記の通りです。
1 い
list1とlist2にそれぞれ文字列を格納し、双方のlistに一致する値のみを出力するシンプルなプログラムです。
containsメソッドを利用する際の注意点
containsメソッドを利用する上で、意識しておいてもらいたいポイントが自作クラスなどを利用して要素のチェックを行う場合です。
containsメソッドではObject.equalsにより判定が行われるため、オブジェクトクラスのequalsメソッドをオーバーライドしていないクラスではcontainsメソッドの挙動が意図したものと異なる結果となってしまいます。
package test; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Test> sample1 = new ArrayList<Test>(); sample1.add(new Test("テスト1")); sample1.add(new Test("テスト2")); sample1.add(new Test("テスト3")); System.out.println(sample1.contains("テスト1")); // 出力結果はfalse } } class Test { String text; Test(String str) { this.text = str; } }
例えば上記サンプルでは、一見文字列が一致しているため出力結果がtrueとなりそうですが、オリジナルクラスの「Test」がオブジェクトクラスのequalsメソッドをオーバーライドしていないため、結果はfalseとなってしまいます。
Javaが標準で提供しているStringクラスやIntegerクラスを利用する場合には問題ありませんが、自作クラスを指定して要素の存在チェックを行う場合には注意しておきましょう。
containsAllメソッドでlistから複数要素をまとめて調べる方法
上記サンプルのように、listをループしてcontainsメソッドで各要素の存在を確認することも可能ですが、コレクションクラスに保持する値が存在するかを一括で確認出来る「containsAll」メソッドも存在します。
サンプル
containsAllメソッドでは、2つのコレクションクラスを作成して存在チェックを行います。
package test; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<String> sample1 = new ArrayList<String>(); List<String> sample2 = new ArrayList<String>(); sample1.add("テスト1"); sample1.add("テスト2"); sample1.add("テスト3"); sample2.add("テスト1"); sample2.add("テスト2"); System.out.println(sample1.containsAll(sample2)); // 出力結果はtrue sample2.add("テスト4"); System.out.println(sample1.containsAll(sample2)); // 出力結果はfalse } }
1つ目のコンソール出力時点では「テスト1」「テスト2」の双方がsample1のリストに存在するため「true」が返却されます。
一方で、2つ目のコンソール出力直前にsample2のリストにsample1に存在しない値を設定したことで「false」が返却される結果に変更されました。
このように、コレクションに設定された全ての値と一致するかを確認したい場合には、containsAllメソッドを利用することも可能です。
さいごに: Javaでlistの要素を確認するならcontainsメソッドを利用しよう
本記事では、Javaのlistに格納された要素を確認するcontainsメソッドの使い方についてご紹介してきました。
リスト内の要素有無によって処理を切り替えたいケースは多いため、containsメソッドを利用する機会は多いものです。
使い方自体はサンプルでご紹介した通りシンプルですので、きちんと使い方を理解して積極的に利用してみましょう。
今回はlistに絞ってcontainsメソッドの使い方をご紹介していきますが、Stringクラスなどでもcontainsメソッドが提供されており、今回ご紹介する内容と同じような使い方をすることが可能です。