0
0

Java Gold 例題 ジェネリクス

Last updated at Posted at 2024-09-04

次のコードについて、正しい選択肢を選んでください

HashSet<Short> set = new HashSet<>() {{
     add((short)0);
     add((short)1);
     add((short)2);				 
}};
		 
for(short i = 1; i <= 3; i++) {
    set.remove(i - 1);
}
		 
System.out.println(set);
  1. [0, 1, 2]が出力される
  2. 何も出力されない
  3. []が出力される
  4. コンパイルエラー
  5. 実行時エラー
解答

正解: 1

[0, 1, 2]

{}の中はインスタンス初期化ブロックで、このブロック内でaddメソッドを使ってセットに要素を追加しています。
この時点で、setにはShort型の0, 1, 2の3つの要素が含まれています。
remove(i - 1)ではshortintの式なのでIntegerにボクシングされます。
HashSetではShort型を扱いますが、Integerオブジェクトを削除しようとしているため、removeは何もしません。
Collection<E>.remove(Object obj)では、どんなオブジェクトでも削除できますが、それが予期せぬ結果を招くことがあります。

要素を削除する場合、remove()の引数を明示的にキャストする必要があります。

set.remove((short)(i - 1));

出力

[]

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0