Java でリストに null 要素が含まれているかどうかをチェックする方法

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Java の Listnull 要素が含まれているかどうかを確認する方法を学びます。まずはシンプルな contains() メソッドから始めて、これを実現するためのさまざまな方法を探ります。contains(null) を使ってリスト内に null 値が存在するかどうかをすばやく判断する方法を学びます。

最初のチェックの後、この実験ではリストを反復処理して各要素が null かどうかを手動で確認する方法を案内します。このアプローチにより、より多くの制御が可能になり、複数の null 要素があるシナリオを処理することもできます。この実験の終わりまでに、Java のリスト内の null を特定するためのさまざまな手法をしっかりと理解するようになります。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/StringManipulationGroup(["String Manipulation"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java/BasicSyntaxGroup -.-> java/for_loop("For Loop") java/StringManipulationGroup -.-> java/strings("Strings") java/DataStructuresGroup -.-> java/arrays("Arrays") java/DataStructuresGroup -.-> java/arrays_methods("Arrays Methods") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") subgraph Lab Skills java/for_loop -.-> lab-559947{{"Java でリストに null 要素が含まれているかどうかをチェックする方法"}} java/strings -.-> lab-559947{{"Java でリストに null 要素が含まれているかどうかをチェックする方法"}} java/arrays -.-> lab-559947{{"Java でリストに null 要素が含まれているかどうかをチェックする方法"}} java/arrays_methods -.-> lab-559947{{"Java でリストに null 要素が含まれているかどうかをチェックする方法"}} java/collections_methods -.-> lab-559947{{"Java でリストに null 要素が含まれているかどうかをチェックする方法"}} java/arraylist -.-> lab-559947{{"Java でリストに null 要素が含まれているかどうかをチェックする方法"}} end

contains() を使った null チェック

このステップでは、contains() メソッドを使って Java の List 内に null 要素が存在するかどうかを確認する方法を探ります。contains() は一般的に特定の要素の存在を確認するために使われますが、Listnull が含まれているかどうかを確認するためにも使用できます。

まず、新しい 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;:これらの行は、ListArrayList を操作するために必要なクラスをインポートします。
  • 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 ループとも呼ばれます)です。インデックスを使用せずにコレクション内の要素を反復処理する便利な方法です。各反復で、変数 namenames リストの現在の要素を保持します。
  • 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 の Listnull 要素が含まれているかどうかをチェックする方法を学びました。引数として null を指定して contains() メソッドを使用することで、単一の null 要素の存在を簡単に判断できることを調べました。

サンプルの ArrayList を作成し、有効な要素と null 値の両方を追加した後、names.contains(null) を使用してチェックを行いました。結果はコンソールに出力され、このメソッドがリスト内の基本的な null チェックに有効であることが示されました。