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

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

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

小唯快跑啊 2019-07-25 16:14:07
正确地从List <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 回答

?
12345678_0001

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

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

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

  • remove(Object o)

  • remove(int index)

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



查看完整回答
反对 回复 2019-07-26
?
精慕HU

TA贡献1845条经验 获得超8个赞

你可以使用铸造

list.remove((int) n);

list.remove((Integer) n);

如果n是int或Integer并不重要,该方法将始终调用您期望的那个。

使用(Integer) nInteger.valueOf(n)new Integer(n)前两个更有效可以使用Integer缓存,而后者将始终创建一个对象。



查看完整回答
反对 回复 2019-07-26
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

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

list.remove(int_parameter);

删除给定位置的元素和

list.remove(Integer_parameter);

从列表中删除给定的对象。

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




查看完整回答
反对 回复 2019-07-26
  • 3 回答
  • 0 关注
  • 438 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信