java 正在从ArrayList中移除特定值[重复]

pes8fvy9  于 2022-12-10  发布在  Java
关注(0)|答案(2)|浏览(131)

此问题在此处已有答案

Java, how to remove an Integer item in an ArrayList(13个答案)
Properly removing an Integer from a List(8个答案)
How to remove integer from list? [duplicate](5个答案)
Remove From ArrayList - Remove an integer from the list(5个答案)
Undesired behavior of ArrayList remove() in Java [duplicate](7个答案)
2天前关闭.

ArrayList<Integer> list = new ArrayList<>();
list.add(15);
list.add(18);
list.add(21);
list.add(24);

// Remove list item with the value 21
list.remove(Integer.valueOf(21));

我无法理解list.remove(Integer.valueOf(21))这一行。AFAIK,Integer.valueOf()返回或转换其他值类型为整数,因此list.remove(Integer.valueOf(21))的含义与list.remove(21)相同,即删除第21位的值。
换句话说,作为list.remove()的参数调用的方法Integer.valueOf()如何“知道”它在该方法内部,以便它返回ArrayList中项的位置?

ybzsozfc

ybzsozfc1#

AFAIK,Integer.valueOf()返回或转换其他值类型为整数,因此list.remove(Integer.valueOf(21))的含义与list.remove(21)相同,即删除第21位的值。
这不正确。
List上有两个remove()版本:

  • remove(Object)继承自Collection接口,该接口删除给定的Object(* 如果存在)*;
  • List接口中声明的remove(int),它将删除给定索引下的元素。

list.remove(Integer.valueOf(21))-匹配remove()的第一个版本。由于编译器会将调用Map到最具体的方法,remove(Object)更具体,因为它不需要取消装箱Integer参数。
这里引用了 *Java语言规范- §15.12.2.编译时步骤2:确定如何解析重载方法的方法签名 *:
第一个阶段执行重载解析而不允许装箱或取消装箱转换,或使用变量arity方法调用。如果在此阶段未找到适用的方法,则处理继续到第二个阶段。
添加Amphesys

hgb9j2n6

hgb9j2n62#

remove(int index)方法删除指定索引处的对象,与remove(Object o)方法不同,remove(Object o)方法删除列表中的指定对象。当你将Integer对象传递给List<Integer>remove()方法时,第二个方法就是你要调用的方法。

相关问题