a is less efficient than using a zero sized array here
333
334 @Override
335 public <T> T[] toArray(T[] a) {
336 return children.toArray(a);337 }
338
339 @Override
a is less efficient than using a zero sized array here
292
293 @Override
294 public <T> T[] toArray(T[] a) {
295 return children.toArray(a);296 }
297
298 @Override
Description
This method uses toArray
with a non-zero sized array argument. This is less efficient than passing a zero-sized array.
This method invokes toArray
on a Collection
object, and passes in an array with a size greater than zero as an argument. It used to be that this was faster than providing an array of size zero (new Type[0]
) in older versions of Java prior to 6. This is because the cost of performing reflection operations was quite high in old Java versions.
This is no longer the case, and providing a zero sized array is now just as fast (or even faster) than providing an array of the same size as the original collection. It is now generally better to use a zero-length array as the argument to toArray
.
Bad Practice
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Integer[] arr1 = list.toArray(new Integer[list.size()]); // Inefficient
Recommended
Integer[] arr2 = list.toArray(new Integer[0]); // Better