はじめに
この実験では、Java の List に null 要素が含まれているかどうかを確認する方法を学びます。まずはシンプルな contains() メソッドから始めて、これを実現するためのさまざまな方法を探ります。contains(null) を使ってリスト内に null 値が存在するかどうかをすばやく判断する方法を学びます。
最初のチェックの後、この実験ではリストを反復処理して各要素が null かどうかを手動で確認する方法を案内します。このアプローチにより、より多くの制御が可能になり、複数の null 要素があるシナリオを処理することもできます。この実験の終わりまでに、Java のリスト内の null を特定するためのさまざまな手法をしっかりと理解するようになります。
contains() を使った null チェック
このステップでは、contains() メソッドを使って Java の List 内に null 要素が存在するかどうかを確認する方法を探ります。contains() は一般的に特定の要素の存在を確認するために使われますが、List に null が含まれているかどうかを確認するためにも使用できます。
まず、新しい Java ファイルを作成しましょう。左側のファイルエクスプローラーで ~/project ディレクトリ内を右クリックし、「新しいファイル」を選択して、NullCheckList.java と名付けます。
次に、エディターで NullCheckList.java を開き、以下のコードを追加します。
import java.util.List;
import java.util.ArrayList;
public class NullCheckList {
public static void main(String[] args) {
// Create a List and add some elements, including null
List<String> names = new ArrayList<>();
names.add("Alice");
names.add(null); // Adding a null element
names.add("Bob");
// Check if the list contains null using contains()
boolean containsNull = names.contains(null);
// Print the result
System.out.println("Does the list contain null? " + containsNull);
}
}
このコードの新しい部分を分解してみましょう。
import java.util.List;とimport java.util.ArrayList;:これらの行は、ListとArrayListを操作するために必要なクラスをインポートします。List<String> names = new ArrayList<>();:これはStringオブジェクトを保持できる新しいArrayListを作成します。ArrayListが実装するインターフェースであるListとして宣言しています。names.add(null);:この行は明示的にnull値をリストに追加します。boolean containsNull = names.contains(null);:これがこのステップの核心です。namesリストに対してcontains()メソッドを呼び出し、引数としてnullを渡します。リストにnullが含まれている場合はtrueを返し、そうでない場合はfalseを返します。結果はブール型の変数containsNullに格納されます。System.out.println("Does the list contain null? " + containsNull);:この行はチェックの結果をコンソールに出力します。
ファイルを保存します(Ctrl+S または Cmd+S)。
次に、プログラムをコンパイルして実行しましょう。WebIDE の下部にあるターミナルを開きます。~/project ディレクトリにいることを確認してください。
javac を使ってコードをコンパイルします。
javac NullCheckList.java
コンパイルが成功すると(出力がないことが成功を意味します)、java を使ってコンパイルされたコードを実行します。
java NullCheckList
リストに null が含まれているかどうかを示す出力が表示されるはずです。
リストをループして null をチェックする
前のステップでは、contains() メソッドを使ってリストに null が含まれているかどうかを確認しました。このメソッドはシンプルですが、null が存在するかどうかしか教えてくれず、null がどこにあるかや何回出現するかは教えてくれません。リスト内の null 要素を処理するより一般的で柔軟な方法は、ループを使ってリストを反復処理し、各要素を個別に確認することです。
このステップでは、NullCheckList.java プログラムを修正して、リストをループし、null 要素の位置(インデックス)を特定します。
WebIDE のエディターで NullCheckList.java ファイルを開きます。既存の main メソッドを以下のコードに置き換えます。
import java.util.List;
import java.util.ArrayList;
public class NullCheckList {
public static void main(String[] args) {
// Create a List and add some elements, including null
List<String> names = new ArrayList<>();
names.add("Alice");
names.add(null); // Adding a null element
names.add("Bob");
names.add("Charlie");
names.add(null); // Adding another null element
System.out.println("Checking list for null elements:");
// Loop through the list using a for loop
for (int i = 0; i < names.size(); i++) {
// Get the element at the current index
String name = names.get(i);
// Check if the element is null
if (name == null) {
System.out.println("Null found at index: " + i);
}
}
}
}
変更点を見てみましょう。
- 複数の
nullを見つけることを示すために、リストにもう 1 つnull要素を追加しました。 for (int i = 0; i < names.size(); i++):これは標準的なforループで、インデックス0からnamesリストのサイズ(ただし、サイズ自体は含まない)まで反復処理します。変数iは現在のインデックスを表します。String name = names.get(i);:ループ内で、names.get(i)は現在のインデックスiの要素を取得し、name変数に格納します。if (name == null):これが重要なチェックです。等価演算子==を使ってname変数とnullを比較します。もし等しければ、現在のインデックスの要素がnullであることを意味します。System.out.println("Null found at index: " + i);:nullが見つかった場合、この行は見つかったインデックスを示すメッセージを出力します。
ファイルを保存します(Ctrl+S または Cmd+S)。
次に、~/project ディレクトリのターミナルから修正したプログラムをコンパイルして実行します。
javac NullCheckList.java
java NullCheckList
リスト内で null 要素が見つかったインデックスを示す出力が表示されるはずです。
Checking list for null elements:
Null found at index: 1
Null found at index: 4
このアプローチにより、リスト内の null 要素に関するより詳細な情報が得られ、プログラムで適切に処理するために必要なことが多いです。
複数の null 要素を処理する
前のステップでは、リストをループして null 要素のインデックスを特定することに成功しました。今度はそれを拡張して、これらの null 要素をどのように処理するかを示します。「処理する」とは、プログラムのロジックによって異なります。例えば、null 要素をスキップしたり、デフォルト値で置き換えたり、特定のアクションを実行したりすることができます。
このステップでは、再度 NullCheckList.java プログラムを修正します。今回は、リストを反復処理し、null 要素と非 null 要素に対して異なるメッセージを出力します。
WebIDE のエディターで NullCheckList.java ファイルを開きます。既存の main メソッドを以下のコードに置き換えます。
import java.util.List;
import java.util.ArrayList;
public class NullCheckList {
public static void main(String[] args) {
// Create a List and add some elements, including null
List<String> names = new ArrayList<>();
names.add("Alice");
names.add(null); // Adding a null element
names.add("Bob");
names.add("Charlie");
names.add(null); // Adding another null element
names.add("David");
System.out.println("Processing list elements:");
// Loop through the list using a for-each loop
for (String name : names) {
// Check if the element is null
if (name == null) {
System.out.println("Found a null element, skipping.");
} else {
// If the element is not null, process it
System.out.println("Processing name: " + name);
}
}
}
}
このバージョンの変更点を見てみましょう。
- リストにもう 1 つ非
null要素 ("David") を追加しました。 for (String name : names):これは拡張forループ(for-each ループとも呼ばれます)です。インデックスを使用せずにコレクション内の要素を反復処理する便利な方法です。各反復で、変数nameはnamesリストの現在の要素を保持します。if (name == null):依然として==演算子を使って、現在の要素 (name) がnullかどうかをチェックします。System.out.println("Found a null element, skipping.");:要素がnullの場合、スキップしていることを示すメッセージを出力します。実際のアプリケーションでは、ここで別のアクションを実行するかもしれません。例えば、nullをログに記録したり、デフォルト値を割り当てたりします。else { System.out.println("Processing name: " + name); }:要素がnullでない場合、elseブロックに入り、非nullの名前を処理していることを示すメッセージを出力します。
ファイルを保存します(Ctrl+S または Cmd+S)。
次に、~/project ディレクトリのターミナルから修正したプログラムをコンパイルして実行します。
javac NullCheckList.java
java NullCheckList
非 null の名前を処理し、null 要素に遭遇したときを示す出力が表示されるはずです。
Processing list elements:
Processing name: Alice
Found a null element, skipping.
Processing name: Bob
Processing name: Charlie
Found a null element, skipping.
Processing name: David
この例は、反復処理中に null 要素を処理する基本的な方法を示しています。特定のニーズに応じて、null をデフォルトの文字列で置き換えたり、リストから null 要素を削除したり、他の操作を実行したりすることができます。重要なのは、要素を使用する前に null をチェックすることです。null オブジェクトに対してメソッドを呼び出そうとすると、NullPointerException が発生します。
まとめ
この実験では、Java の List に null 要素が含まれているかどうかをチェックする方法を学びました。引数として null を指定して contains() メソッドを使用することで、単一の null 要素の存在を簡単に判断できることを調べました。
サンプルの ArrayList を作成し、有効な要素と null 値の両方を追加した後、names.contains(null) を使用してチェックを行いました。結果はコンソールに出力され、このメソッドがリスト内の基本的な null チェックに有効であることが示されました。



