比较arraylist和linkedlist ...我的代码错了吗?

时间:2011-03-17 23:25:35

标签: java arraylist linked-list

我在另一个问题中询问为什么在阅读文件和创建列表时,arraylist看起来比linkedlist更快。我现在尝试添加到列表的前面或列表的后面。 Arraylist仍然更快。

我只是想确保我正确使用这些东西。这就是我正在做的事情:

public class LinkedListTest {

    private List<String> Names;

    public LinkedListTest(){
            Names = new LinkedList<String>();
    }

然后我只使用链表列表方法,即“Names.add(strings)”。当我测试arraylists时,它几乎相同:

public class ArrayListTest {

    private List<String> Names;

    public ArrayListTest(){
            Names = new ArrayList<String>();
    }

我做得对吗?事实上,将构造函数方法中的列表类型从ArrayList更改为LinkedList几乎是我在比较速度时在代码中所做的唯一更改。这是正确的方法吗?

编辑: 哦,我只是在add函数之前和之后做System.currentTimeMillis()来测量时间。

3 个答案:

答案 0 :(得分:0)

如果你想要一些简单的东西,简单的时间增量很好,但如果你想要更复杂的东西以供将来参考,请查看:

http://www.ibm.com/developerworks/java/library/j-benchmark1.html

答案 1 :(得分:0)

  

然后我只使用链表列表方法   即“Names.add(strings)”。当我   经过测试的arraylists,差不多   相同的:

你是如何测试的?一般来说,这是通过测量完成相同操作所需的时间来完成数百万次,然后进行简单的划分。

答案 2 :(得分:0)

是的,你正确使用它们。你测试了多少数据?如果数据集太小,您可能无法获得良好的测试结果,因为可能会出现特殊情况优化,从而导致结果出现偏差。对于您的计时,您应该平均许多测试运行的时间,以确保CPU负载峰值和其他资源峰值被平均。

我不确定,但我建议尝试不同数量的测试数据 - 可能会增加10倍,看看你是否看到了性能的线性变化。例如,您可以使用100个项目1000,10000,100000和1000000测试每个列表,并查看差异是否为线性以及实现的比较方式。

除了在开头和结尾插入外,测试将项目插入列表中间所需的时间可能会很有趣。