有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

要删除/删除数组中等于“a”的所有字符串/对象,我需要做什么


共 (2) 个答案

  1. # 1 楼答案

    参见下面的代码

    ArrayList<String> a = new ArrayList<>(Arrays.asList(strings));
    a.remove(i);
    strings = new String[a.size()];
    a.toArray(strings);
    
  2. # 2 楼答案

    [如果你想要一些现成的代码,请滚动到我的“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:singleton仅限于一个条目,而asList方法允许您添加其他字符串以在以后过滤:Arrays.asList("a", "b", "c")

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

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

    编辑3:如果在同一个类中频繁使用此代码,您可能希望考虑将此代码添加到类:

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