猿问

正确地从列表中删除整数<Integer>

正确地从列表中删除整数<Integer>

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

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),在处理整数列表时,哪个元素通过引用删除元素?


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


互换的青春
浏览 498回答 3
3回答

RISEBY

Java总是调用最适合您的论点的方法。只有在没有方法可以调用时才执行自动装箱和隐式向上转换,而不需要进行强制转换/自动装箱。List接口指定了两个Remove方法(请注意参数的命名):remove(Object o)remove(int index)这意味着list.remove(1)移除位置1处的对象remove(new Integer(1))从此列表中移除指定元素的第一个匹配项。

眼眸繁星

你可以用铸造list.remove((int)&nbsp;n);和list.remove((Integer)&nbsp;n);不管n是int还是Integer,方法都会调用您期望的方法。使用(Integer) n或Integer.valueOf(n)比new Integer(n)因为前两个可以使用Integer缓存,而后者总是会创建一个对象。

呼如林

我不知道“正确”的方式,但你建议的方式很好:list.remove(int_parameter);移除给定位置的元素list.remove(Integer_parameter);从列表中移除给定对象。这是因为VM一开始试图查找一点儿没错相同的参数类型,然后尝试自动装箱。
随时随地看视频慕课网APP

相关分类

Java
我要回答