Is there a better way of achieving this?
public static List toList(String[] array) {
List list = new ArrayList(array.length);
Based on the reference of java.util.Collections.addAll(Collection super String> 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 super T> 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.