java - 如何从 Java 数组中删除对象?

标签 java arrays data-structures data-manipulation

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

foo[0] = "a";
foo[1] = "cc";
foo[2] = "a";
foo[3] = "dd";

如何删除/删除数组中等于 "a" 的所有字符串/对象?

最佳答案

[如果您想要一些现成的代码,请滚动到我的“Edit3”(剪切后)。其余的留给后代。]

充实Dustman's idea :

List<String> list = new ArrayList<String>(Arrays.asList(array));
list.removeAll(Arrays.asList("a"));
array = list.toArray(array);

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

Edit2:上述方法保留了相同的数组(因此数组仍然是相同的长度);最后一个元素之后的元素设置为 null。如果您想要一个大小完全符合要求的数组,请使用它:

array = list.toArray(new String[0]);
<小时/>

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

private static final String[] EMPTY_STRING_ARRAY = new String[0];

那么函数就变成了:

List<String> list = new ArrayList<>();
Collections.addAll(list, array);
list.removeAll(Arrays.asList("a"));
array = list.toArray(EMPTY_STRING_ARRAY);

这将停止在堆中乱扔无用的空字符串数组,否则每次调用函数时都会new这些数组。

愤世嫉俗者的建议(参见评论)也将有助于解决堆乱扔问题,为了公平起见,我应该提到它:

array = list.toArray(new String[list.size()]);

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

关于java - 如何从 Java 数组中删除对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56746240/

相关文章:

java - 使用 Spring AMQP 时如何正确处理 RabbitMQ channel 上 basicAck 的 IOException?

java - 使用 Scanner 的 nextLine() 和 hasNextLine() 方法时出现问题

java - BigDecimal 到 Java/Android 上 BigDecimal 的强大功能

java - Retrofit 是如何转化为对象的?

c - 使用 qsort 对字符串进行排序以检查它们是否是 Anagram

python - 如何在 Python 中将元组的元组转换为 pandas.DataFrame?

php - 通过将两个关联数组的值插入一个新数组来合并它们

Javascript:用两个可能的项目对多个数组进行排序

c - 当我将一个元素添加到链表数组中包含的链表时,为什么列表中的所有其他元素都会被删除?

arrays - 每个 k=1..n 的所有大小为 k 的子数组的最大总和