gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:49:07 24 4
gpt4 key购买 nike

给定一个 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。如果您想要一个大小完全符合要求的 new 数组,请改用它:

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

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

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);

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

愤世嫉俗的人的建议(见评论)也将有助于堆乱扔垃圾,为了公平起见,我应该提一下:

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com