为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

互换的青春 2019-06-26 16:49:13
正确地从列表中删除整数<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提到-精确的参数匹配优先于自动装箱。
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

Java总是调用最适合您的论点的方法。只有在没有方法可以调用时才执行自动装箱和隐式向上转换,而不需要进行强制转换/自动装箱。

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

  • remove(Object o)

  • remove(int index)

这意味着list.remove(1)移除位置1处的对象remove(new Integer(1))从此列表中移除指定元素的第一个匹配项。


查看完整回答
反对 回复 2019-06-26
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

你可以用铸造

list.remove((int) n);

list.remove((Integer) n);

不管n是int还是Integer,方法都会调用您期望的方法。

使用(Integer) nInteger.valueOf(n)new Integer(n)因为前两个可以使用Integer缓存,而后者总是会创建一个对象。


查看完整回答
反对 回复 2019-06-26
?
呼如林

TA贡献1798条经验 获得超3个赞

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

list.remove(int_parameter);

移除给定位置的元素

list.remove(Integer_parameter);

从列表中移除给定对象。

这是因为VM一开始试图查找一点儿没错相同的参数类型,然后尝试自动装箱。


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 497 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号