Muhammad Gelbana Muhammad Gelbana - 3 days ago 5
Java Question

List.toArray(Object[]) performance

I'm getting a

List
of object A, then I use
Apache Commons Collection4
to transform the obtained
List
from having A instances to having B instances.

listOfBs = (List<B>) CollectionUtils.collect(listOfAs, componentTransformer);


However, eventually I need to have an
Array
of Bs not a
List
.

So my question is, which is faster.


  1. Convert the list using
    CollectionUtils.collect

  2. Create an array using
    listOfBs.toArray(new B[listOfBs.size()])



Or


  1. Loop over the
    listOfAs

  2. Transform each A object to a B object

  3. Add each B object to an array (B[])



The difference between the first approach and the second approach is that the first approach has much less code, but I'm not sure if the toArray method bares a hidden loop or expensive operations.

What I see in the second approach is that I'm sure I'll loop only once over the
listOfAs
list.

So which approach is faster ?

Answer

Don't be concerned about performance of List.toArray(), its complexity is linear as it will resort to a single loop internally.

As it is implemented with Arrays.copyOf, which eventually comes to System.arraycopy, that is implemented in native code it could be potentially even faster than a java-level loop.

Comments