はじめに
この実験では、Java のコレクション内に特定の要素が存在するかどうかを確認する方法を学びます。すべてのコレクション型で利用可能な contains() メソッドの使用に焦点を当てます。異なる要素型で contains() を使用する練習を行い、null 要素の扱い方を学びます。この実験の終了時には、Java コレクション内の要素の存在を確認することに習熟するでしょう。
contains() を使用した要素の確認
このステップでは、Java のコレクション内に特定の要素が存在するかどうかを確認する方法を探ります。コレクションは、複数の要素を 1 つの単位にまとめるために使用される基本的なデータ構造です。Java は、List、Set、Map など、さまざまな種類のコレクションを提供しています。
コレクションを操作する際の一般的なタスクの 1 つは、特定の要素が存在するかどうかを判断することです。すべてのコレクション型のルートインターフェースである Java の Collection インターフェースは、この目的のために便利なメソッド contains() を提供しています。
contains() メソッドは 1 つの引数(確認したい要素)を取り、ブール値を返します。要素がコレクション内に見つかった場合は true、そうでない場合は false を返します。
一般的な List の一種である ArrayList で contains() メソッドを使用する方法を示すために、簡単な Java プログラムを作成しましょう。
WebIDE エディタで
HelloJava.javaファイルが開いていない場合は、開きます。ファイルの内容全体を次のコードに置き換えます。
import java.util.ArrayList; import java.util.List; public class HelloJava { public static void main(String[] args) { // Create a List of strings List<String> fruits = new ArrayList<>(); // Add some fruits to the list fruits.add("Apple"); fruits.add("Banana"); fruits.add("Orange"); fruits.add("Mango"); // Check if the list contains "Banana" boolean hasBanana = fruits.contains("Banana"); System.out.println("Does the list contain Banana? " + hasBanana); // Check if the list contains "Grape" boolean hasGrape = fruits.contains("Grape"); System.out.println("Does the list contain Grape? " + hasGrape); } }この新しいコードを分解してみましょう。
import java.util.ArrayList;とimport java.util.List;:これらの行は、List と ArrayList を操作するために必要なクラスをインポートします。List<String> fruits = new ArrayList<>();:この行は、Stringオブジェクトを保持できる新しいArrayListを作成し、fruitsという名前の変数に割り当てます。fruits.add("Apple");などの行:これらの行は、要素(果物の名前を表す文字列)をfruitsリストに追加します。boolean hasBanana = fruits.contains("Banana");:この行は、fruitsリストでcontains()メソッドを呼び出し、文字列 "Banana" が存在するかどうかを確認します。結果(trueまたはfalse)は、ブール型の変数hasBananaに格納されます。System.out.println("Does the list contain Banana? " + hasBanana);:この行は、"Banana" の存在確認の結果を出力します。boolean hasGrape = fruits.contains("Grape");とその後のprintln:これらの行は、リストに存在しない "Grape" について同じ確認を行います。
ファイルを保存します(Ctrl+S または Cmd+S)。
ターミナルで修正したプログラムをコンパイルします。
javac HelloJava.javaコンパイルしたプログラムを実行します。
java HelloJava次のような出力が表示されるはずです。
Does the list contain Banana? true Does the list contain Grape? false
この出力は、contains() メソッドが "Banana" がリストにあり、"Grape" がリストにないことを正しく識別したことを確認しています。
要素の存在を確認する方法を理解することは、Java のコレクションを操作する際の基本的なスキルです。次のステップでは、contains() メソッドのさらなる側面と、さまざまなシナリオでの動作を探ります。
異なる要素型でテストする
前のステップでは、String オブジェクトの List で contains() メソッドを使用しました。contains() メソッドは汎用性が高く、数値、カスタムオブジェクト、さらには他のコレクションなど、さまざまな型の要素を格納するコレクションで使用できます。
contains() を使用する際、Java はコレクション内のオブジェクトの equals() メソッドに依存して、検索対象の要素が一致するかどうかを判断します。プリミティブ型(int、double、boolean など)の場合、対応するラッパークラス(Integer、Double、Boolean)が使用され、それらの equals() メソッドは値を比較します。オブジェクトの場合、デフォルトの equals() メソッドは 2 つのオブジェクト参照が同じメモリ位置を指しているかどうかをチェックします。ただし、多くのクラス(String、Integer など)は、オブジェクトの実際の内容または値を比較するために equals() メソッドをオーバーライドしています。
プログラムを修正して、Integer オブジェクトの List で動作させ、contains() の動作を確認しましょう。
WebIDE エディタで
HelloJava.javaファイルを開きます。現在のコードを次のコードに置き換えます。
import java.util.ArrayList; import java.util.List; public class HelloJava { public static void main(String[] args) { // Create a List of integers List<Integer> numbers = new ArrayList<>(); // Add some numbers to the list numbers.add(10); numbers.add(25); numbers.add(5); numbers.add(50); // Check if the list contains 25 boolean hasTwentyFive = numbers.contains(25); System.out.println("Does the list contain 25? " + hasTwentyFive); // Check if the list contains 100 boolean hasOneHundred = numbers.contains(100); System.out.println("Does the list contain 100? " + hasOneHundred); // Check if the list contains the Integer object with value 5 boolean hasFiveObject = numbers.contains(Integer.valueOf(5)); System.out.println("Does the list contain Integer object with value 5? " + hasFiveObject); } }このコードでは、以下のことを行っています。
Integerオブジェクトを格納するListを作成します:List<Integer> numbers = new ArrayList<>();。numbers.add()を使用して整数値をリストに追加します。Java は自動的にプリミティブなint値(10、25、5、50)をIntegerオブジェクトに変換します(これをオートボクシングと呼びます)。numbers.contains(25)とnumbers.contains(100)を使用して、整数値の存在を確認します。再び、Java はチェックを行う前にプリミティブなint値 25 と 100 をIntegerオブジェクトにオートボクシングします。Integer.valueOf(5)を使用して明示的にIntegerオブジェクトを作成し、リストにこの特定のオブジェクトが含まれているかどうかを確認します。
ファイルを保存します。
ターミナルでプログラムをコンパイルします。
javac HelloJava.javaプログラムを実行します。
java HelloJava次のような出力が表示されるはずです。
Does the list contain 25? true Does the list contain 100? false Does the list contain Integer object with value 5? true
これは、contains() が Integer オブジェクトで正しく動作し、それらの値を比較することを示しています。contains() メソッドは、コレクション内の要素と検索対象の要素の equals() メソッドを効果的に使用します。
次のステップでは、特殊なケースとして、contains() メソッドで null 要素を扱う方法を探ります。
Null 要素の扱い
Java では、コレクションに null 要素が含まれることがあります。contains() メソッドが null を扱う際の動作を理解することは重要です。
良いニュースは、contains() メソッドは null 要素を適切に扱うように設計されているということです。コレクションに null が含まれている場合、contains(null) を呼び出すと true が返されます。コレクションに null が含まれていない場合は、false が返されます。これは、一般的に null に対する equals() の実装方法と一致しています(任意のオブジェクトの equals(null) は false を返すべきですが、null.equals(anyObject) は、コレクションの contains 実装によって内部的に処理されない場合、NullPointerException をスローします)。
プログラムを修正して、null 要素を含め、その存在を確認しましょう。
WebIDE エディタで
HelloJava.javaファイルを開きます。現在のコードを次のコードに置き換えます。
import java.util.ArrayList; import java.util.List; public class HelloJava { public static void main(String[] args) { // Create a List that can contain null List<String> mixedList = new ArrayList<>(); // Add some elements, including null mixedList.add("First"); mixedList.add(null); // Adding a null element mixedList.add("Second"); mixedList.add(null); // Adding another null element mixedList.add("Third"); // Check if the list contains null boolean hasNull = mixedList.contains(null); System.out.println("Does the list contain null? " + hasNull); // Check if the list contains a non-existent element boolean hasFourth = mixedList.contains("Fourth"); System.out.println("Does the list contain Fourth? " + hasFourth); // Check if the list contains "First" boolean hasFirst = mixedList.contains("First"); System.out.println("Does the list contain First? " + hasFirst); } }このコードでは、以下のことを行っています。
mixedListという名前のListを作成します。- いくつかの
String要素を追加するとともに、mixedList.add(null);を使用して明示的にnullを追加します。 - その後、
mixedList.contains(null)を使用して、リストにnull値が含まれているかどうかを確認します。 - 存在しない文字列 ("Fourth") と存在する文字列 ("First") の存在を確認し、
nullの確認結果と並べて結果を見ます。
ファイルを保存します。
ターミナルでプログラムをコンパイルします。
javac HelloJava.javaプログラムを実行します。
java HelloJava次のような出力が表示されるはずです。
Does the list contain null? true Does the list contain Fourth? false Does the list contain First? true
この出力は、contains() がリスト内の null の存在を正しく識別することを確認しています。コレクションには(特定のコレクション型とその使用方法によって)null が含まれる可能性があり、contains() はその存在を確認する信頼性の高い方法を提供することに注意することが重要です。
これで、Java コレクション内の要素(さまざまなデータ型や null という特殊なケースを含む)の存在を確認するために contains() メソッドを使用する方法を学びました。これは、Java プログラムでコレクションを操作する上で貴重なツールです。
まとめ
この実験では、Java で contains() メソッドを使用してコレクションに特定の要素が含まれているかどうかを確認する方法を学びました。Collection インターフェースを通じて利用できるこのメソッドが、要素の存在を示すブール値を返す仕組みを見てきました。ArrayList での使用例を示し、既存の要素と存在しない要素を正しく識別する様子を確認しました。
また、contains() メソッドがさまざまなデータ型でどのように動作するか、およびコレクション内の null 要素をどのように扱うかを調べました。この実践的な経験を通じて、Java コレクションを操作する際の基本的な操作について実践的な理解を得ることができました。



