Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

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」を返却します。

ポテパンダの一言メモ

今回はlistに絞ってcontainsメソッドの使い方をご紹介していきますが、Stringクラスなどでもcontainsメソッドが提供されており、今回ご紹介する内容と同じような使い方をすることが可能です。

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メソッドを利用する機会は多いものです。

使い方自体はサンプルでご紹介した通りシンプルですので、きちんと使い方を理解して積極的に利用してみましょう。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。