首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从ArrayList中删除整数的Java方法

从ArrayList中删除整数的Java方法
EN

Stack Overflow用户
提问于 2013-11-10 11:34:20
回答 6查看 222关注 0票数 0

我有一个整数数组列表,希望从其中删除一个整数值。为了澄清:假设我有一个函数,它接受整数的ArrayList,并指定整数值。我需要返回(value+1)从其中删除的列表。

boolean deleteFromList(ArrayList<Integer> list, Integer value)

现在,如果我这么做

代码语言:javascript
运行
复制
return list.remove(value+1)

编译器会抱怨,因为它将尝试调用接受int参数的delete方法,并从指定的位置删除对象,而不是实际的对象。那么,有什么正确的方法来处理这个问题呢?更好的做法是:

代码语言:javascript
运行
复制
list.remove((Integer)(value+1))

代码语言:javascript
运行
复制
int v = value.intValue();
v++;
list.remove(new Integer(v)); 

?在第二种情况下,我是否可以确保删除正确的值?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-11-10 11:49:56

在第二种情况下,我是否可以确保删除正确的值?

是的你可以。

remove方法将使用equals(Object)标识要从列表中删除的对象。由于Integer.equals根据值(而不是对象标识)进行比较,所以如何创建Integer实例并不重要.如果包装的int值相同的话。

但是..。您的第二个版本不如第一个版本:

  • 它很麻烦:3条语句而不是1条。
  • 您使用的是new Integer(...)而不是Integer.valueOf(...),后者总是要创建一个新实例。相比之下,自动装箱(或显式调用Integer.valueOf(...) )使用Integer类实例缓存,这通常会避免创建新实例。
票数 1
EN

Stack Overflow用户

发布于 2013-11-10 11:47:06

list.remove(value+1)将在给定索引处删除。

您可以使用list.remove(Integer.valueOf(value+1))删除Integer

Integer.valueOf(v)被重新命令,而不是new Integer(v),因为它允许为特殊值重用Integer实例(参见javadoc)。

编辑:在装箱/取消装箱方面,可以使用像trove4j这样的库来完全消除这个问题,它定义了一个动态的整数数组来存储原语值,而不是数字类(参见TIntArrayList)。没有装箱,没有取消装箱,更低的GC使用和更好的性能。

票数 2
EN

Stack Overflow用户

发布于 2013-11-10 11:39:30

代码语言:javascript
运行
复制
list.remove(Integer.valueOf(value+1));

应该能正常工作。

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

https://stackoverflow.com/questions/19889212

复制
相关文章

相似问题

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