空リストと null リストでテストする
実際のプログラミングでは、リストが空である場合や null
である場合などのエッジケースを考慮することが重要です。現在の containsDuplicates
メソッドは要素のあるリストに対してはうまく機能しますが、空のリストや null
のリストを渡した場合はどうなるでしょうか。
~/project/DuplicateDetector.java
の main
メソッドにさらに例を追加してこれをテストしましょう。コードエディターでファイルを開き、既存のコードの後に以下の行を main
メソッドに追加します。
System.out.println("\nEmpty list: " + new ArrayList<>());
System.out.println("Contains duplicates? " + containsDuplicates(new ArrayList<>())); // Expected: false
List<String> nullList = null;
System.out.println("\nNull list: " + nullList);
// The following line will cause a NullPointerException if not handled
// System.out.println("Contains duplicates? " + containsDuplicates(nullList));
ファイルを保存します(Ctrl+S または Cmd+S)。
次に、プログラムを再度コンパイルして実行します。
コンパイル:
javac DuplicateDetector.java
実行:
java DuplicateDetector
空のリストの出力が表示されるはずです。
List with duplicates: [apple, banana, apple, orange]
Contains duplicates? true
List without duplicates: [grape, mango, kiwi]
Contains duplicates? false
Empty list: []
Contains duplicates? false
空のリストの出力は正しいです。空のリストには重複がありません。
ただし、System.out.println("Contains duplicates? " + containsDuplicates(nullList));
の行のコメントを外してコンパイルして実行すると、NullPointerException
が発生します。これは、null
のリストから HashSet
を作成しようとしているためで、これは許可されていません。
containsDuplicates
メソッドをより堅牢にするために、入力リストが null
の場合を処理する必要があります。メソッドの冒頭にチェックを追加することができます。
~/project/DuplicateDetector.java
の containsDuplicates
メソッドを変更して、null チェックを含めます。
public static boolean containsDuplicates(List<String> list) {
// Handle null input
if (list == null) {
return false; // A null list does not contain duplicates
}
// Create a HashSet from the list
Set<String> uniqueElements = new HashSet<>(list);
// Compare the size of the list with the size of the HashSet
return list.size() != uniqueElements.size();
}
次に、main
メソッドで null リストをテストする行のコメントを外します。
List<String> nullList = null;
System.out.println("\nNull list: " + nullList);
System.out.println("Contains duplicates? " + containsDuplicates(nullList)); // Expected: false
ファイルを保存します(Ctrl+S または Cmd+S)。
最後に一度、プログラムをコンパイルして実行します。
コンパイル:
javac DuplicateDetector.java
実行:
java DuplicateDetector
出力には、クラッシュすることなく null リストの結果が含まれるはずです。
List with duplicates: [apple, banana, apple, orange]
Contains duplicates? true
List without duplicates: [grape, mango, kiwi]
Contains duplicates? false
Empty list: []
Contains duplicates? false
Null list: null
Contains duplicates? false
null チェックを追加することで、containsDuplicates
メソッドはより堅牢になり、null
入力を適切に処理できるようになりました。これは、予期しないエラーを防ぐための重要なプログラミングの実践です。