此问题在此处已有答案:
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
中项的位置?
2条答案
按热度按时间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
hgb9j2n62#
remove(int index)
方法删除指定索引处的对象,与remove(Object o)
方法不同,remove(Object o)
方法删除列表中的指定对象。当你将Integer
对象传递给List<Integer>
的remove()
方法时,第二个方法就是你要调用的方法。