给定一个 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/