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

2019年1月12日 9点热度 0条评论

给定一个 n Objects数组,假设它是一个字符串数组,它具有以下值:

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 ed。

愤世嫉俗的人的建议(请参阅评论)也将有助于解决乱扔垃圾的问题,为公平起见,我应该提到:

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

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