はじめに
この実験では、Java の Set が空かどうかをチェックする方法を学びます。セットに要素が含まれているかどうかを判断する簡単で効率的な方法である標準の isEmpty() メソッドを調べます。
また、size() メソッドを使用してセットのサイズを確認する方法を学び、ヌルセットを扱う際に潜在的な NullPointerException をどのように処理するかを理解します。この実験の終わりまでに、様々なシナリオで Java のセットの空性をチェックすることができるようになります。
isEmpty() を使った Set のチェック
このステップでは、isEmpty() メソッドを使用して Java の Set が空かどうかをチェックする方法を学びます。Set は重複要素を含むことができないコレクションです。isEmpty() メソッドは、コレクションに要素が含まれているかどうかを判断する簡単で効率的な方法です。
まず、
~/projectディレクトリにSetCheck.javaという名前の新しい Java ファイルを作成しましょう。左側のファイルエクスプローラーで右クリックして「新しいファイル」を選択し、SetCheck.javaと入力することで作成できます。エディタで
SetCheck.javaファイルを開き、以下のコードを追加します。import java.util.HashSet; import java.util.Set; public class SetCheck { public static void main(String[] args) { // Create a new HashSet Set<String> fruits = new HashSet<>(); // Check if the set is empty using isEmpty() boolean isEmptyBeforeAdd = fruits.isEmpty(); System.out.println("Is the fruits set empty before adding elements? " + isEmptyBeforeAdd); // Add some elements to the set fruits.add("Apple"); fruits.add("Banana"); fruits.add("Orange"); // Check if the set is empty after adding elements boolean isEmptyAfterAdd = fruits.isEmpty(); System.out.println("Is the fruits set empty after adding elements? " + isEmptyAfterAdd); } }このコードの新しい部分を分解してみましょう。
import java.util.HashSet;とimport java.util.Set;:これらの行は、SetとHashSetを使用するために必要なクラスをインポートします。Set<String> fruits = new HashSet<>();:この行は、fruitsという名前の新しいHashSetオブジェクトを作成します。<String>を指定することで、このセットがStringオブジェクトを格納することを示します。boolean isEmptyBeforeAdd = fruits.isEmpty();:この行は、fruitsセットに対してisEmpty()メソッドを呼び出し、結果(trueまたはfalse)をisEmptyBeforeAddという名前のブール型変数に格納します。fruits.add("Apple");:この行は、文字列 "Apple" をfruitsセットに追加します。boolean isEmptyAfterAdd = fruits.isEmpty();:この行は、要素を追加した後にセットが空かどうかを再度チェックします。
SetCheck.javaファイルを保存します(Ctrl+S または Cmd+S)。次に、Java プログラムをコンパイルしましょう。WebIDE の下部にあるターミナルを開き、
~/projectディレクトリにいることを確認します。その後、以下のコマンドを実行します。javac SetCheck.javaコンパイルが成功すると、何も出力されません。
最後に、
javaコマンドを使用してコンパイルされたプログラムを実行します。java SetCheck以下のような出力が表示されるはずです。
Is the fruits set empty before adding elements? true Is the fruits set empty after adding elements? falseこの出力は、
isEmpty()メソッドが要素を追加する前と後のセットの状態を正しく報告したことを確認しています。
size() で Set のサイズを確認する
前のステップでは、isEmpty() を使用して Set が空かどうかをチェックする方法を学びました。もう 1 つの一般的な操作は、Set にいくつの要素が含まれているかを調べることです。これには size() メソッドを使用します。size() メソッドは、現在セットに含まれている要素の数を返します。
WebIDE のエディタで
~/projectディレクトリにあるSetCheck.javaファイルを開きます。mainメソッドを修正して、size()メソッドの呼び出しを含めます。既存のmainメソッドを以下のコードに置き換えます。import java.util.HashSet; import java.util.Set; public class SetCheck { public static void main(String[] args) { // Create a new HashSet Set<String> fruits = new HashSet<>(); // Check the size of the set before adding elements int sizeBeforeAdd = fruits.size(); System.out.println("Size of the fruits set before adding elements: " + sizeBeforeAdd); // Add some elements to the set fruits.add("Apple"); fruits.add("Banana"); fruits.add("Orange"); // Check the size of the set after adding elements int sizeAfterAdd = fruits.size(); System.out.println("Size of the fruits set after adding elements: " + sizeAfterAdd); // Add a duplicate element (Sets do not allow duplicates) fruits.add("Apple"); // Check the size again int sizeAfterDuplicateAdd = fruits.size(); System.out.println("Size of the fruits set after adding a duplicate: " + sizeAfterDuplicateAdd); } }追加した部分は以下の通りです。
int sizeBeforeAdd = fruits.size();:この行は、fruitsセットに対してsize()メソッドを呼び出し、返された整数値(要素の数)をsizeBeforeAddという名前の変数に格納します。int sizeAfterAdd = fruits.size();:これは、最初の 3 つの要素を追加した後のサイズをチェックします。fruits.add("Apple");:再度 "Apple" を追加しようとします。"Apple" はすでにセットに含まれているため、この操作はセットの内容を変更しません。int sizeAfterDuplicateAdd = fruits.size();:これは、重複要素を追加しようとした後のサイズをチェックします。
SetCheck.javaファイルを保存します。ターミナルで修正した Java プログラムをコンパイルします。
javac SetCheck.java再び、出力がないことはコンパイルが成功したことを示します。
プログラムを実行します。
java SetCheck以下のような出力が表示されるはずです。
Size of the fruits set before adding elements: 0 Size of the fruits set after adding elements: 3 Size of the fruits set after adding a duplicate: 3この出力は、
size()メソッドが要素の数を正しく報告し、重複要素を追加してもセットのサイズが増えないことを示しています。
Null の Set を扱う
前のステップでは、適切に初期化された Set を扱いました。しかし、実際のプログラミングでは、Set 変数が null である状況に遭遇することがあります。null オブジェクトに対して isEmpty() や size() などのメソッドを呼び出そうとすると、Java で一般的なエラーである NullPointerException が発生します。これらのケースを適切に扱うことは重要です。
WebIDE のエディタで
~/projectディレクトリにあるSetCheck.javaファイルを開きます。mainメソッドを修正して、nullセットをどのように扱うかを示します。既存のmainメソッドを以下のコードに置き換えます。import java.util.HashSet; import java.util.Set; public class SetCheck { public static void main(String[] args) { // Declare a Set variable but initialize it to null Set<String> colors = null; // Attempting to call isEmpty() or size() here would cause a NullPointerException // System.out.println("Is the colors set empty? " + colors.isEmpty()); // This would crash! // To safely check if a set is null or empty, we first check for null if (colors == null) { System.out.println("The colors set is null."); } else { // If it's not null, we can safely check if it's empty if (colors.isEmpty()) { System.out.println("The colors set is empty."); } else { System.out.println("The colors set is not empty and has " + colors.size() + " elements."); } } // Now, let's initialize the set and add elements colors = new HashSet<>(); colors.add("Red"); colors.add("Blue"); // Check again after initialization and adding elements if (colors == null) { System.out.println("The colors set is null."); } else { if (colors.isEmpty()) { System.out.println("The colors set is empty."); } else { System.out.println("The colors set is not empty and has " + colors.size() + " elements."); } } } }この更新されたコードでは:
Set<String> colors = null;:Set変数colorsを宣言し、明示的にnullに設定します。NullPointerExceptionを引き起こす行をコメントアウトしました。if (colors == null):これが重要なチェックです。colors変数に対してメソッドを呼び出す前に、まずnullかどうかをチェックします。colorsがnullでない場合、colors.isEmpty()を使用して空かどうかをチェックするか、colors.size()を使用してサイズを取得します。- その後、
colorsを新しいHashSetで初期化し、要素を追加して、セットがnullでも空でもない場合の異なる出力を示します。
SetCheck.javaファイルを保存します。ターミナルでプログラムをコンパイルします。
javac SetCheck.javaプログラムを実行します。
java SetCheck以下のような出力が表示されるはずです。
The colors set is null. The colors set is not empty and has 2 elements.これは、
Set変数のメソッドにアクセスしようとする前に、潜在的なnull値を安全に扱う方法を示しています。初期化されていない可能性のあるオブジェクト参照を扱う場合は、常に最初にnullをチェックしてください。
まとめ
この実験では、Java の Set が空かどうかをチェックする方法を学びました。まず、このチェックを行う標準的で最も効率的な方法である isEmpty() メソッドを使用しました。HashSet を作成し、要素を追加する前後でその空の状態をチェックし、isEmpty() のブール型の出力を観察しました。これにより、セットに要素が含まれているかどうかを判断するための isEmpty() の基本的な使い方が示されました。



