小编典典

从列表中正确删除整数

all

这是我刚刚遇到的一个很好的陷阱。考虑一个整数列表:

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)


这里要考虑的要点是 提到的——精确的参数匹配优先于自动装箱。

我不知道“正确”的方式,但你建议的方式工作得很好:

list.remove(int_parameter);

删除给定位置的元素和

list.remove(Integer_parameter);

从列表中删除给定对象。

这是因为 VM 首先尝试查找使用完全相同的参数类型声明的方法,然后才尝试自动装箱。


阅读 57

收藏
2022-06-22

共1个答案

小编典典

Java 总是调用最适合您的论点的方法。自动装箱和隐式向上转换仅在没有可以在没有强制转换/自动装箱的情况下调用的方法时执行。

List 接口指定了两个删除方法(请注意参数的命名):

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

这意味着list.remove(1)删除位置 1 的对象并remove(new Integer(1))从此列表中删除指定元素的第一次出现。

2022-06-22