1.Collections.addAll() 与 ArrayList.addAll()都是将所有指定的元素添加到指定的集合中;但是两个的效率谁更高呢?
通过查看Collections.addAll() 源码有这样的一段话:
The behavior of this convenience method is identical to that of<tt>c.addAll(Arrays.asList(elements))</tt>, but this method is likelyto run significantly faster under most implementations.用我蹩脚英语翻译下:Collections.addAll() 与 c.addAll(Arrays.asList(elements))的行为相同,但是在大多数实现下,此方法(Collections.addAll() )的运行速度可能明显更快。
下面我们可以通过代码测试一下 (往list添加数组)
public static String[] ids = {"1", "2", "3", "4", "5", "11", "12", "13", "14", "15"}; public static List<Integer> list2 =new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,6,7,8,9,10)); public static long arraysTakeTime(int size) { long startTime = System.currentTimeMillis(); List list = new ArrayList(); for (int i = 0; i < size; i++) { list.add(i); } //list.addAll(Arrays.asList(ids)); list.addAll(Arrays.asList(list2)); // System.out.println(list); return System.currentTimeMillis() - startTime; } public static long collectionsTakeTime(int size) { long startTime = System.currentTimeMillis(); System.out.println("--------------------startTime------------------------------"+startTime); List list = new ArrayList(); for (int i = 0; i < size; i++) { list.add(i); } //Collections.addAll(list, ids); Collections.addAll(list, list2);/* System.out.println("--------------------endtime------------------------------"); System.out.println(System.currentTimeMillis() - startTime);*/ return System.currentTimeMillis() - startTime; } public static void main(String[] args) { //通过比对size的大小查看各自花费的时间 int size = 1000000; System.out.println("Arrays's take time is " + arraysTakeTime(size)); System.out.println("Collections's take time is " + collectionsTakeTime(size)); }当size = 10000时;
当size=100000时;
当size=1000000时,
由此看来, Collections.addAll() 与 ArrayList.addAll()往里面添加数组的话,性能差别不大。
往list添加list中:
size = 10000;
当size=100000时,
当size=100000时,
所以 往list添加list中推荐使用ArrayList.addAll()