Array to Collection: Optimized code

前端 未结 10 2010
萌比男神i
萌比男神i 2021-01-31 14:26

Is there a better way of achieving this?

public static List toList(String[] array) {

    List list = new ArrayList(array.length);

          


        
10条回答
  •  孤街浪徒
    2021-01-31 15:03

    Based on the reference of java.util.Collections.addAll(Collection c, String... elements) its implementation is similar to your first method, it says

    Adds all of the specified elements to the specified collection. Elements to be added may be specified individually or as an array. The behavior of this convenience method is identical to that of c.addAll(Arrays.asList(elements)), but this method is likely to run significantly faster under most implementations.

    Its implementation in jdk is (jdk7)

    public static  boolean addAll(Collection c, T... elements) {
        boolean result = false;
        for (T element : elements)
            result |= c.add(element);
        return result;
    }
    

    So among your samples the better approach must be Collections.addAll(list, array);

    Since Java 8, we can use Stream api which may perform better

    Eg:-

    String[] array = {"item1", "item2", "item3"};
    
    Stream stream = Stream.of(array);
    
    //if the array is extremely large 
    stream = stream.parallel();
    
    final List list = stream.collect(Collectors.toList());
    

    If the array is very large we can do it as a batch operation in parallel using parallel stream (stream = stream.parallel()) that will utilize all CPUs to finish the task quickly. If the array length is very small parallel stream will take more time than sequential stream.

提交回复
热议问题