给定一个n个对象数组,假设它是一个string数组,并且具有以下值:
foo[0] = "a"; foo[1] = "cc"; foo[2] = "a"; foo[3] = "dd";
如何删除/删除数组中所有等于“ a”的字符串/对象?
[如果需要一些现成的代码,请滚动到我的“ Edit3”(剪切后)。其余的供后代使用。]
为了充实清洁工的想法:
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")。
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()错误的列表)。