はじめに
この実験では、Java の List 内に特定の要素が存在するかどうかを確認する方法を学びます。データのコレクションを扱う際に、この一般的なタスクを実行するためのさまざまな方法を探ります。
まず、List インターフェースが提供する便利な contains() メソッドの使い方を学びます。その後、リストを手動で反復処理して要素を確認する方法を理解します。これは特定のシナリオで役立つことがあります。最後に、これらの確認を行う際にリスト内に null 要素が存在する場合の対処方法を説明します。
contains() を使用した要素のチェック
このステップでは、contains() メソッドを使用して Java の List 内に特定の要素が存在するかどうかを確認する方法を学びます。これはデータのコレクションを扱う際の一般的なタスクです。
まず、~/project ディレクトリに ListContains.java という名前の新しい Java ファイルを作成しましょう。左側のファイルエクスプローラーで右クリックして「新しいファイル」を選択し、ListContains.java と入力することで作成できます。
次に、エディターで ListContains.java ファイルを開き、以下のコードを追加します。
import java.util.ArrayList;
import java.util.List;
public class ListContains {
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<String> fruits = new ArrayList<>();:この行は、Stringオブジェクトを保持できるListの一種である新しいArrayListを作成します。fruits.add("...");:これらの行は、要素(果物の名前)をリストに追加します。fruits.contains("Banana");:これがこのステップの核心です。contains()メソッドはfruitsリストに対して呼び出されます。このメソッドは 1 つの引数を取り、それが確認したい要素です。要素がリスト内に見つかった場合はtrueを返し、そうでない場合はfalseを返します。boolean hasBanana = ...;:contains()の結果はブール型の変数(hasBananaまたはhasGrape)に格納されます。System.out.println("...");:これらの行は結果をコンソールに出力します。
ListContains.java ファイルを保存します(Ctrl+S または Cmd+S)。
次に、WebIDE の下部にあるターミナルを開きます。~/project ディレクトリにいることを確認してください。そうでない場合は、cd ~/project と入力して Enter キーを押します。
javac コマンドを使用して Java コードをコンパイルします。
javac ListContains.java
エラーがなければ、~/project ディレクトリに ListContains.class ファイルが作成されます。
最後に、java コマンドを使用してコンパイルされた Java プログラムを実行します。
java ListContains
以下のような出力が表示されるはずです。
Does the list contain Banana? true
Does the list contain Grape? false
この出力は、contains() メソッドが「Banana」と「Grape」がリスト内に存在するかどうかを正しく識別したことを確認しています。
リストを手動でループ処理する
前のステップでは、contains() メソッドを使用して要素を確認しました。contains() は便利ですが、場合によってはリスト内の各要素を 1 つずつ調べる必要があります。これをリストの反復処理またはループ処理と呼びます。このステップでは、for ループを使用してこれを行う方法を学びます。
WebIDE のエディターで ~/project ディレクトリ内の ListContains.java ファイルを開きます。
既存のコードを変更して、fruits リストをループ処理し、各要素を出力します。既存の main メソッドを以下のコードに置き換えます。
import java.util.ArrayList;
import java.util.List;
public class ListContains {
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");
// Loop through the list using a for loop
System.out.println("Printing fruits in the list:");
for (int i = 0; i < fruits.size(); i++) {
String fruit = fruits.get(i);
System.out.println(fruit);
}
}
}
新しい部分を見てみましょう。
System.out.println("Printing fruits in the list:");:この行は、果物の一覧を出力する前にヘッダーを表示します。for (int i = 0; i < fruits.size(); i++):これは標準的なforループです。int i = 0:カウンタ変数iを 0 から始めます。プログラミングでは、多くの場合 0 からカウントを始めます。i < fruits.size():iがfruitsリスト内の要素の総数より小さい限り、ループは続きます。fruits.size()は要素の数を返します。i++:ループが実行されるたびに、iの値を 1 増やします。
String fruit = fruits.get(i);:ループ内で、fruits.get(i)はリスト内の現在の位置iにある要素を取得します。この要素をfruitというString変数に格納します。System.out.println(fruit);:この行は現在のfruitをコンソールに出力します。
ListContains.java ファイルを保存します。
次に、ターミナルで変更したコードをコンパイルします。
javac ListContains.java
コンパイルが成功したら、プログラムを実行します。
java ListContains
以下の出力が表示されるはずです。
Printing fruits in the list:
Apple
Banana
Orange
Mango
これは、for ループがリストを正常に反復処理し、各果物を新しい行に出力したことを示しています。このようにリストを手動でループ処理することで、各要素の処理方法をより細かく制御でき、存在確認だけでなく、より複雑なタスクにも役立ちます。
リスト内の null 要素を処理する
現実の世界では、リストに「null」値が含まれることがあります。null 値は値が存在しないことを表します。null 値に対してチェックせずに操作を行おうとすると、プログラムは NullPointerException でクラッシュする可能性があります。このステップでは、リストをループ処理する際に null 要素をどう処理するかを学びます。
WebIDE のエディターで ~/project ディレクトリ内の ListContains.java ファイルを開きます。
コードを変更して、リストに null 要素を追加し、ループ内で null をチェックするようにします。既存の main メソッドを以下のコードに置き換えます。
import java.util.ArrayList;
import java.util.List;
public class ListContains {
public static void main(String[] args) {
// Create a List of strings
List<String> fruits = new ArrayList<>();
// Add some fruits to the list, including a null
fruits.add("Apple");
fruits.add("Banana");
fruits.add(null); // Adding a null element
fruits.add("Orange");
fruits.add("Mango");
// Loop through the list and handle null elements
System.out.println("Printing fruits in the list (handling nulls):");
for (int i = 0; i < fruits.size(); i++) {
String fruit = fruits.get(i);
// Check if the element is null before processing
if (fruit != null) {
System.out.println(fruit);
} else {
System.out.println("Found a null element");
}
}
}
}
変更点を説明します。
fruits.add(null);:リストにnull値を追加しました。if (fruit != null):ループ内でfruitを出力する前に、fruit変数が null で ない ことをチェックするif文を追加しました。System.out.println(fruit);:この行はifブロック内にあるため、fruitが null でない場合にのみ実行されます。else { System.out.println("Found a null element"); }:このelseブロックは、fruitが null の場合に実行され、null 値自体を出力しようとせずにメッセージを出力します。
ListContains.java ファイルを保存します。
ターミナルで変更したコードをコンパイルします。
javac ListContains.java
コンパイルが成功したら、プログラムを実行します。
java ListContains
以下の出力が表示されるはずです。
Printing fruits in the list (handling nulls):
Apple
Banana
Found a null element
Orange
Mango
ご覧の通り、プログラムは null 要素を正しく識別して処理し、クラッシュすることなく動作します。Java プログラミングでは、エラーを防ぎ、プログラムをより堅牢にするために、null チェックを行うことが重要です。
まとめ
この実験では、Java の List が特定の要素を含むかどうかをチェックする方法を学びました。まず、組み込みの contains() メソッドを使用する最も簡単な方法を調べました。このメソッドは、要素の存在を効率的に判断し、boolean 型の結果を返します。
次に、リストを手動で反復処理してチェックを行う方法を詳しく調べました。これにより、contains() メソッドが内部でどのように動作するかをより深く理解することができました。最後に、これらのチェックを行う際にリスト内の null 要素を処理するという重要な点について取り上げ、堅牢でエラーのないコードを作成する方法を学びました。



