package testList;
import java.util.ArrayList;
public class TestLArrayList {
public static void main(String[] args) {
System.out.println("测试10000000条数据的add操作");
System.out.println("默认容量耗时:"+testContent(10000000));
// System.out.println("初始容量为10000耗时:"+testContent(10000,10000000));
// System.out.println("初始容量为100000耗时:"+testContent(100000,10000000));
// System.out.println("初始容量为1000000耗时:"+testContent(1000000,10000000));
System.out.println("初始容量为10000000耗时:"+testContent(10000000,10000000));
// System.out.println("初始容量为20000000耗时:"+testContent(20000000,10000000));
}
/**
* 测试ArrayList初始容量对添加对象性能的影响
* @param number 添加对象数量
* @return
*/
private static Long testContent(int number){
ArrayList<Test> list1=new ArrayList<Test>();
Long start=System.currentTimeMillis();
for(int i=0;i<number;i++){
list1.add(new Test(i));
}
long end=System.currentTimeMillis();
return (end-start);
}
/**
* 测试ArrayList初始容量对ArrayList添加对象性能的影响
* @param size 初始容量
* @param number 添加对象数量
* @return
*/
private static Long testContent(int size,int number){
ArrayList<Test> list1=new ArrayList<Test>(size);
Long start=System.currentTimeMillis();
for(int i=0;i<number;i++){
list1.add(new Test(i));
}
long end=System.currentTimeMillis();
return (end-start);
}
}
class Test{
private int i;
public Test(int i){
this.i=i;
}
}
测试10000000条数据的add操作
默认容量耗时:2866
初始容量为10000耗时:2515
初始容量为100000耗时:2413
初始容量为1000000耗时:2286
初始容量为10000000耗时:935
初始容量为20000000耗时:2490
结果:ArrayList在每次增加元素时,都要调用该方法来确保足够的容量。当容量不足以容纳当前的元素个数时,就设置新的容量为旧的容量的1.5倍加1,如果设置后的新容量还不够,则直接新容量设置为传入的参数(也就是所需的容量),而后用Arrays.copyof()方法将元素拷贝到新的数组。从中可以看出,当容量不够时,每次增加元素,都要将原来的元素拷贝到一个新的数组中,非常之耗时,但也不能把ArrayList的初始容量开得太大,这样也很耗时的。因此建议在事先能确定元素数量的情况下,才使用ArrayList。