首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从List<Integer>中正确删除整数

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

Stack Overflow用户
提问于 2010-12-26 22:25:36
回答 5查看 86.4K关注 0票数 206

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

代码语言:javascript
复制
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))呢?这会导致一些令人讨厌的bug。

在处理整数列表时,区分remove(int index) (从给定索引中删除元素)和remove(Object o) (通过引用删除元素)的正确方法是什么?

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

EN

回答 5

Stack Overflow用户

发布于 2010-12-26 22:31:15

您可以使用强制转换

代码语言:javascript
复制
list.remove((int) n);

代码语言:javascript
复制
list.remove((Integer) n);

N是int还是Integer都无关紧要,该方法将始终调用您期望的值。

使用(Integer) nInteger.valueOf(n)比使用new Integer(n)更有效,因为前两者可以使用整数缓存,而后者总是创建对象。

票数 70
EN

Stack Overflow用户

发布于 2010-12-26 22:29:37

我不知道什么是“适当”的方式,但你建议的方式很好:

代码语言:javascript
复制
list.remove(int_parameter);

删除给定位置的元素,并

代码语言:javascript
复制
list.remove(Integer_parameter);

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

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

票数 10
EN

Stack Overflow用户

发布于 2010-12-26 22:31:51

list.remove(4)list.remove(int index)完全匹配,因此将调用它。如果您想调用list.remove(Object),请执行以下操作:list.remove((Integer)4)

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4534146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档