首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中从数组中删除对象?

如何在Java中从数组中删除对象?
EN

Stack Overflow用户
提问于 2008-09-21 23:16:27
回答 19查看 374.1K关注 0票数 86

给定一个由n对象组成的数组,假设它是一个由字符串数组组成的数组,它具有以下值:

代码语言:javascript
复制
foo[0] = "a";
foo[1] = "cc";
foo[2] = "a";
foo[3] = "dd";

要删除/移除数组中等于"a"的所有字符串/对象,我必须做什么?

EN

回答 19

Stack Overflow用户

回答已采纳

发布于 2008-09-21 23:30:34

如果你想要一些现成的代码,请滚动到我的"Edit3“(在剪切之后)。剩下的将留给子孙后代。

充实Dustman's idea

代码语言:javascript
复制
List<String> list = new ArrayList<String>(Arrays.asList(array));
list.removeAll(Arrays.asList("a"));
array = list.toArray(array);

编辑:我现在使用Arrays.asList而不是Collections.singleton:singleton被限制为一个条目,而asList方法允许您添加其他字符串以便稍后过滤掉:Arrays.asList("a", "b", "c")

Edit2:上面的方法保留相同的数组(因此数组的长度仍然相同);最后一个数组之后的元素被设置为null。如果您想要一个大小完全符合要求的新数组,请改用以下代码:

代码语言:javascript
复制
array = list.toArray(new String[0]);

Edit3:如果您经常在同一个类中使用此代码,您可能会考虑将此代码添加到您的类中:

代码语言:javascript
复制
private static final String[] EMPTY_STRING_ARRAY = new String[0];

然后,该函数变为:

代码语言:javascript
复制
List<String> list = new ArrayList<>();
Collections.addAll(list, array);
list.removeAll(Arrays.asList("a"));
array = list.toArray(EMPTY_STRING_ARRAY);

这样就不会在堆中堆满无用的空字符串数组,否则这些数组在每次调用函数时都会被new

cynicalman的建议(参见评论)也将有助于垃圾堆放,为了公平起见,我应该提一下:

代码语言:javascript
复制
array = list.toArray(new String[list.size()]);

我更喜欢我的方法,因为它可能更容易得到错误的显式大小(例如,在错误的列表上调用size() )。

票数 114
EN

Stack Overflow用户

发布于 2014-04-21 07:44:13

Java 8中的另一种选择:

代码语言:javascript
复制
String[] filteredArray = Arrays.stream(array)
    .filter(e -> !e.equals(foo)).toArray(String[]::new);
票数 32
EN

Stack Overflow用户

发布于 2008-09-21 23:18:07

使用Arrays.asList()对数组进行List,并在所有适当的元素上调用remove()。然后调用“列表”上的toArray(),再次返回到一个数组中。

性能不是很好,但是如果你正确地封装它,你可以在以后做一些更快的事情。

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

https://stackoverflow.com/questions/112503

复制
相关文章

相似问题

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