In Java, remove empty elements from a list of Strings

前端 未结 11 2407
余生分开走
余生分开走 2020-12-01 06:05

In Java, I have an ArrayList of Strings like:

[,Hi, ,How,are,you]

I want to remove the null and empty elements, how to change it so it is l

11条回答
  •  不知归路
    2020-12-01 06:45

    There are a few approaches that you could use:

    1. Iterate over the list, calling Iterator.remove() for the list elements you want to remove. This is the simplest.

    2. Repeatedly call List.remove(Object). This is simple too, but performs worst of all ... because you repeatedly scan the entire list. (However, this might be an option for a mutable list whose iterator didn't support remove ... for some reason.)

    3. Create a new list, iterate over the old list, adding elements that you want to retain to a new list.

    4. If you can't return the new list, as 3. above and then clear the old list and use addAll to add the elements of the new list back to it.

    Which of these is fastest depends on the class of the original list, its size, and the number of elements that need to be removed. Here are some of the factors:

    • For an ArrayList, each individual remove operation is O(N), where N is the list size. It is expensive to remove multiple elements from a large ArrayList using the Iterator.remove() method (or the ArrayList.remove(element) method).

      By contrast, the Iterator.remove method for a LinkedList is O(1).

    • For an ArrayList, creating and copying a list is O(N) and relatively cheap, especially if you can ensure that the destination list's capacity is large enough (but not too large).

      By contrast, creating and copying to a LinkedList is also O(N), but considerably more expensive.

    All of this adds up to a fairly complicated decision tree. If the lists are small (say 10 or less elements) you can probably get away with any of the approaches above. If the lists could be large, you need to weigh up all of the issues in the list of the expected list size and expected number of removals. (Otherwise you might end up with quadratic performance.)

提交回复
热议问题