我运行我的分析器程序进行了 1000 次迭代,以计算插入的Empty ArrayList
平均时间和插入的平均时间Non-Empty ArrayList
。我运行我的探查器程序ArrayList<Item>
,Item
类在哪里
class Item{
int id;
String name;
}
探查器程序类似于
main(){
final int iterations = 1000;
/**** Empty List Insert ****/
int id = 0;
long[] timerecords = new long[iterations];
ArrayList<Item> list = new ArrayList<>();
for (int i = 0; i < iterations; i++) {
long stime = System.nanoTime(); //Start Time
list.add(new Item(id, "A"));
long elapsedTime = System.nanoTime() - stime; //Elapsed time
timerecords[i] = elapsedTime; //Record Elapsed time
//reset
list.clear();
}
System.out.println("Empty List Insert Takes = " + getAverageTime(timerecords) + " nanoseconds");
/**** Non-Empty List Insert ****/
list = new ArrayList<>();
timerecords = new long[iterations];
//Insert some Items
list.add(new Item(id++, "B")); list.add(new Item(id++, "R"));
list.add(new Item(id++, "H")); list.add(new Item(id++, "C"));
for (int i = 0; i < iterations; i++) {
Item item = new Item(id, "A");
long stime = System.nanoTime(); //Start Time
list.add(item);
long elapsedTime = System.nanoTime() - stime; //Elapsed time
timerecords[i] = elapsedTime; //Record Elapsed time
//reset
list.remove(item);
}
System.out.println("Non-Empty List Insert Takes = " + getAverageTime(timerecords) + " nanoseconds");
}
wheregetAverageTime(long [] timerecords)
方法以双倍的形式返回平均时间。多次运行该程序后,我观察到插入空 ArrayList 比插入非空 ArrayList 需要更多时间。一种这样的运行输出是
Empty List Insert Takes = 1027.781 nanoseconds
Non-Empty List Insert Takes = 578.825 nanoseconds
这背后的原因是什么?