import java.util.ArrayList;
public class ArrayListSpeed {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
final int N = 10000000;
Object obj = new Object();
/*没用调用ensureCapacity()方法初始化ArrayList对象*/
ArrayList list = new ArrayList();
long startTime = System.currentTimeMillis();
for (int i = 0; i <= N; i++) {
list.add(obj);
}
long endTime = System.currentTimeMillis();
System.out.println("没有调用ensureCapacity()方法所用时间:"
+ (endTime - startTime) + "ms");
/*调用ensureCapacity()方法初始化ArrayList对象*/
list = new ArrayList();
startTime = System.currentTimeMillis();
// 预先设置list的大小
list.ensureCapacity(N);
for (int i = 0; i <= N; i++) {
list.add(obj);
}
endTime = System.currentTimeMillis();
System.out.println("调用ensureCapacity()方法所用时间:" + (endTime - startTime)
+ "ms");
}
}
结果 :
没有调用ensureCapacity()方法所用时间:81ms
调用ensureCapacity()方法所用时间:48ms
起到了优化效果
import java.util.ArrayList;
public class ArrayListSpeed {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
final int N = 100000000; //多加了一个零
Object obj = new Object();
/*没用调用ensureCapacity()方法初始化ArrayList对象*/
ArrayList list = new ArrayList();
long startTime = System.currentTimeMillis();
for (int i = 0; i <= N; i++) {
list.add(obj);
}
long endTime = System.currentTimeMillis();
System.out.println("没有调用ensureCapacity()方法所用时间:"
+ (endTime - startTime) + "ms");
/*调用ensureCapacity()方法初始化ArrayList对象*/
list = new ArrayList();
startTime = System.currentTimeMillis();
// 预先设置list的大小
list.ensureCapacity(N);
for (int i = 0; i <= N; i++) {
list.add(obj);
}
endTime = System.currentTimeMillis();
System.out.println("调用ensureCapacity()方法所用时间:" + (endTime - startTime)
+ "ms");
}
}
结果却大大不同 :
没有调用ensureCapacity()方法所用时间:596ms
调用ensureCapacity()方法所用时间:2283ms
这是为什么 ?