The Java API docs say the following about Collections.addAll
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.
So if I understand correctly, a) is slower than b):
a)
Collection<Integer> col = new ArrayList<Integer>(); col.addAll(Arrays.asList(1, 2, 3, 4, 5));
b)
Collection<Integer> col = new ArrayList<Integer>(); // Collections.addAll(col, Arrays.asList(1, 2, 3, 4, 5)); <-- won't compile Collections.addAll(col, 1, 2, 3, 4, 5);
Can anyone explain to me, why that is?
edited: corrected code example. thx to polygenelubricants
AddAll is faster than Add Similarly, addAll provides higher operations per second when compared with add . So next time when you are adding something to an array make sure that you pile them and add it using addAll . The addAll is almost twice as fast as the add version.
The addAll() method of java. util. Collections class is used to add all of the specified elements to the specified collection. Elements to be added may be specified individually or as an array.
Let's take a closer look at the two of them:
// a) col.addAll(Arrays.asList(1, 2, 3, 4, 5));
Here's what happens:
Integer[]
Arrays.asList
creates a List<Integer>
backed by the arrayaddAll
iterates over a Collection<Integer>
using Iterator<Integer>
// b) Collections.addAll(col, 1, 2, 3, 4, 5);
Here's what happens:
Integer[]
addAll
iterates over an array (instead of an Iterable<Integer>
)We can see now that b)
may be faster because:
Arrays.asList
call is skipped, i.e. no intermediary List
is created.Iterator
.That said, unless profiling shows otherwise, the difference isn't likely to be "significant". Do not optimize prematurely. While Java Collection Framework classes may be slower than arrays, they perform more than adequately for most applications.
Collections.addAll(Collection<? super T> c, T... elements)
- varargs i.e. array-basedCollection.addAll(Collection<? extends E> c)
- Collection
-basedCollections.addAll(col, arr)
Collection
, use col.addAll(otherCol)
Collections.addAll(col, otherCol.toArray())
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With