1. ホーム

[解決済み】List<Integer>からIntegerを適切に削除する方法

2022-04-20 01:37:13

質問

ここで、いい落とし穴に遭遇しました。 整数のリストを考えてみましょう。

List<Integer> list = new ArrayList<Integer>();
list.add(5);
list.add(6);
list.add(7);
list.add(1);

を実行したときに何が起こるか、経験的に推測してみましょう。 list.remove(1) ? はどうでしょうか? list.remove(new Integer(1)) ? これは厄介なバグの原因になることがあります。

を区別する適切な方法は何ですか? remove(int index) は、与えられたインデックスから要素を削除するものであり remove(Object o) というのは、整数のリストを扱うときに、参照によって要素を削除するためでしょうか?


ここで考えなければならないのは、1つの ニキータが言った - 正確なパラメータ・マッチングは、オートボックスよりも優先されます。

解決方法は?

Javaは常に引数に最適なメソッドを呼び出します。自動ボックス化と暗黙のアップキャストは、キャスト/自動ボックス化せずに呼び出せるメソッドがない場合にのみ実行されます。

Listインターフェースでは、2つのremoveメソッドが指定されています(引数の命名に注意してください)。

  • remove(Object o)
  • remove(int index)

ということは list.remove(1) は位置 1 のオブジェクトを削除し remove(new Integer(1)) は、このリストから指定された要素の最初の出現箇所を削除します。