「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。

Java の開発では、「List に特定の値が含まれているかどうか」を判定したいケースが多くあります。
例えば、入力チェック、検索ロジック、重複確認などです。

そのような場面では、contains() メソッドを使うことで簡単に判定できます。
この記事では、基本構文から実践例、オブジェクト比較時の注意点まで解説します。


✔結論:contains()で存在判定できる


■ contains() の基本構文

boolean result = list.contains(検索したい値);
  • 含まれていれば → true

  • 含まれていなければ → false

非常にシンプルです。


✔ 使用例(String 型)

import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<String> fruits = Arrays.asList("apple", "banana", "orange");

        System.out.println(fruits.contains("banana")); // true
        System.out.println(fruits.contains("grape"));  // false
    }
}
判定対象 結果
"banana" true(含まれる)
"grape" false(含まれない)

✔ contains() は equals() を利用して判定する


※ここに既存画像②(equals判定の関係解説)挿入


contains() は内部的に equals() を利用して比較します。
そのため、比較対象がオブジェクト型の場合、equals() を正しく実装しないと想定どおり判定できません。


■ equals() をオーバーライドした例

class User {
    String name;

    User(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (!(obj instanceof User)) return false;
        User user = (User) obj;
        return this.name.equals(user.name);
    }

    @Override
    public int hashCode() {
        return name.hashCode();
    }
}

public class Main {
    public static void main(String[] args) {
        List<User> list = Arrays.asList(new User("Taro"), new User("Hanako"));

        System.out.println(list.contains(new User("Taro")));    // true
        System.out.println(list.contains(new User("Ichiro")));  // false
    }
}

▶ もし equals() を未実装なら?

System.out.println(list.contains(new User("Taro"))); // false(意図しない結果)

別インスタンス扱いになるため見つからない


✔ contains() を使う時の注意点

注意点説明
equals() の実装が必須オブジェクト比較の場合、デフォルトでは参照比較になるため判定が意図通り動かないことがあります。
大文字・小文字に注意文字列比較では "Apple" と "apple" は別扱いです。
大量データではパフォーマンスに注意contains() は線形検索(O(n))のため、データ数が多い場合 HashSet の利用も検討してください。

✔ 大規模データなら Set が高速

大量データで検索を繰り返す場合は ListHashSet に変更する方が効率的です。

Set<String> fruits = new HashSet<>(Arrays.asList("apple", "banana", "orange"));

System.out.println(fruits.contains("banana")); // true

まとめ

  • contains() は List に検索対象が含まれているか簡単に判定できます。

  • オブジェクト比較では equals() を正しく実装する必要があります。

  • 頻繁に検索するケースでは HashSet などへの置き換えも検討しましょう。

0 0
Article Rating
申し込む
注目する
guest
0 コメント一覧
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る

Ads by Google

0 0
Article Rating
申し込む
注目する
guest
0 コメント一覧
最も古い
最新 高評価
インラインフィードバック
すべてのコメントを見る
0
あなたの考えが大好きです、コメントしてください。x