Próbáld ki úgy is, hogy az ArrayList-et new ArrayList(n) -nel hozod létre, ahol n egy int és nagyobb, mint a listába pakolandó összes várható elem száma.
Hogy a javadoc-ból idézzek:
"Each ArrayList instance has a capacity. The capacity is the size of the array used to store the elements in the list. It is always at least as large as the list size. As elements are added to an ArrayList, its capacity grows automatically. The details of the growth policy are not specified beyond the fact that adding an element has constant amortized time cost."
Azt hiszem 10 az alap méret, ha nem adsz meg semmit, és amikor ez elfogy, akkor foglal egy új, 1,5x akkora array-t. És amikor az elfogy, akkor megint 1,5x annyit. Tehát mondjuk 10000 elem bepakolása közben jópárszor másolgat ide-oda array-ok között a jvm... Te meg nem biztos, hogy ezt akartad lemérni.