<分区>
我想亲眼看看某些数据结构的行为方式。我从 ArrayList
开始,并用自定义类的对象填充它。但是当我玩弄它时,我注意到在上面运行测试方法 X 时它的执行速度要慢得多,或者如果我第二次做同样的工作两次,速度会快 6 倍。
这里有一些例子:
private void generateItems(int amount)
{
System.out.println("Populating list with " + amount + " items...");
long time = System.nanoTime();
for (int i = 0; i < amount; i++)
{
items.add(new Item("Type", "Subtype", random.nextInt(width), random.nextInt(height)));
}
System.out.println(timePassed(time) + " List size: " + items.size());
}
private void sortList(int x, int y)
{
System.out.println("Sorting list...");
long time = System.nanoTime();
Collections.sort(items, new ItemComparator(x, y));
System.out.println(timePassed(time) + " List sorted.");
System.out.println("First: " + items.get(0));
}
现在让我们将这两个方法运行两次:
items = new ArrayList<>();
generateItems(100000); //33ms
sortList(0, 0); //118ms
items = new ArrayList<Item>();
generateItems(100000); //5ms
sortList(0, 0); //28ms
我知道当我对一个已经排序的列表进行排序时会花费更少的时间,因为计算机会更好地赌博结果,但在这里我生成了两个完全随机的列表。
我还有一些涉及迭代和条件项检索的方法,它们的行为都相同:第一个比稍后运行的要慢得多。
为了继续我对其他数据结构的测试,我想了解更多关于这种行为的信息。也许我在这里做错了什么或者结果是预期的,为什么?我如何进行这些比较可靠的测试?