Java の開発では、「List に特定の値が含まれているかどうか」を判定したいケースが多くあります。
例えば、入力チェック、検索ロジック、重複確認などです。
そのような場面では、contains() メソッドを使うことで簡単に判定できます。
この記事では、基本構文から実践例、オブジェクト比較時の注意点まで解説します。
✔結論:contains()で存在判定できる
■ contains() の基本構文
-
含まれていれば →
true -
含まれていなければ →
false
非常にシンプルです。
✔ 使用例(String 型)
| 判定対象 | 結果 |
|---|---|
"banana" |
true(含まれる) |
"grape" |
false(含まれない) |
✔ contains() は equals() を利用して判定する
※ここに既存画像②(equals判定の関係解説)挿入
contains() は内部的に equals() を利用して比較します。
そのため、比較対象がオブジェクト型の場合、equals() を正しく実装しないと想定どおり判定できません。
■ equals() をオーバーライドした例
▶ もし equals() を未実装なら?
→ 別インスタンス扱いになるため見つからない
✔ contains() を使う時の注意点
| 注意点 | 説明 |
|---|---|
| equals() の実装が必須 | オブジェクト比較の場合、デフォルトでは参照比較になるため判定が意図通り動かないことがあります。 |
| 大文字・小文字に注意 | 文字列比較では "Apple" と "apple" は別扱いです。 |
| 大量データではパフォーマンスに注意 | contains() は線形検索(O(n))のため、データ数が多い場合 HashSet の利用も検討してください。 |
✔ 大規模データなら Set が高速
大量データで検索を繰り返す場合は List → HashSet に変更する方が効率的です。
まとめ
-
contains()は List に検索対象が含まれているか簡単に判定できます。 -
オブジェクト比較では
equals()を正しく実装する必要があります。 -
頻繁に検索するケースでは
HashSetなどへの置き換えも検討しましょう。
