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 likely
to 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时,