How do I remove objects from an array in Java?

前端 未结 20 1392
Happy的楠姐
Happy的楠姐 2020-11-22 01:20

Given an array of n Objects, let\'s say it is an array of strings, and it has the following values:

foo[0] = \"a\";
foo[1]          


        
20条回答
  •  囚心锁ツ
    2020-11-22 01:39

    [If you want some ready-to-use code, please scroll to my "Edit3" (after the cut). The rest is here for posterity.]

    To flesh out Dustman's idea:

    List list = new ArrayList(Arrays.asList(array));
    list.removeAll(Arrays.asList("a"));
    array = list.toArray(array);
    

    Edit: I'm now using Arrays.asList instead of Collections.singleton: singleton is limited to one entry, whereas the asList approach allows you to add other strings to filter out later: Arrays.asList("a", "b", "c").

    Edit2: The above approach retains the same array (so the array is still the same length); the element after the last is set to null. If you want a new array sized exactly as required, use this instead:

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

    Edit3: If you use this code on a frequent basis in the same class, you may wish to consider adding this to your class:

    private static final String[] EMPTY_STRING_ARRAY = new String[0];
    

    Then the function becomes:

    List list = new ArrayList<>();
    Collections.addAll(list, array);
    list.removeAll(Arrays.asList("a"));
    array = list.toArray(EMPTY_STRING_ARRAY);
    

    This will then stop littering your heap with useless empty string arrays that would otherwise be newed each time your function is called.

    cynicalman's suggestion (see comments) will also help with the heap littering, and for fairness I should mention it:

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

    I prefer my approach, because it may be easier to get the explicit size wrong (e.g., calling size() on the wrong list).

提交回复
热议问题