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

Java 比较arraylist和linkedlist…我的代码错了吗?,java,arraylist,linked-list,Java,Arraylist,Linked List,我在另一个问题中问到,为什么arraylist在读取文件和创建列表时似乎比linkedlist快。我现在已经尝试添加到列表的前面或后面。Arraylist的速度更快 我只是想确定我用对了这些东西。以下是我正在做的: public class LinkedListTest { private List<String> Names; public LinkedListTest(){ Names = new LinkedList<Strin

我在另一个问题中问到,为什么arraylist在读取文件和创建列表时似乎比linkedlist快。我现在已经尝试添加到列表的前面或后面。Arraylist的速度更快

我只是想确定我用对了这些东西。以下是我正在做的:

public class LinkedListTest {

    private List<String> Names;

    public LinkedListTest(){
            Names = new LinkedList<String>();
    }
然后我只使用linkedlist方法ie Names.addstrings。当我测试ArrayList时,它几乎是一样的:

public class ArrayListTest {

    private List<String> Names;

    public ArrayListTest(){
            Names = new ArrayList<String>();
    }
我做得对吗?事实上,在比较速度时,将构造函数方法中的列表类型从ArrayList更改为LinkedList几乎是我在代码中所做的唯一更改。这样做对吗

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

如果您想要简单的时间增量,则可以使用简单的时间增量,但是如果您想要更复杂的时间增量,请查看以下内容以供将来参考:

然后我只使用linkedlist方法 ie Names.addstrings。当我 经过测试的ArrayList几乎 相同:

public class ArrayListTest {

    private List<String> Names;

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

你是怎么测试的?一般来说,它是通过测量执行相同操作所需的时间来完成的,数百万次之后是一个简单的除法。

是的,您正确地使用了这些。您测试了多少数据?如果数据集太小,您可能得不到好的测试结果,因为可能会有一些特例优化影响结果。对于计时,您应该平均多次测试运行的时间,以确保CPU负载峰值和其他资源峰值的平均值

我不确定,但我建议尝试不同数量的测试数据——可能增加10倍,看看性能是否有线性变化。例如,您可以使用100个项目(1000、10000、100000和1000000)测试每个列表,查看差异是否是线性的,以及实现之间的比较情况


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

我刚刚创建了两个独立的类。但我似乎做得对。而linkedlist只是慢了一点…对于所有事情来说…一直如此。呵呵。测试功能也没什么了不起的。只是一个for循环,它逐行接收文本文件直到null…输入列表中的每一行。我在add names函数之前和之后执行System.currentTimeMillis并减去值。函数在两次调用之间运行了多少次?一次调用不应该花费接近毫秒的时间,即使它真的效率很低。函数被调用了一次。函数读取130000行文本文件130000次调用ListType.add。这意味着您将始终添加到集合的末尾,显然数组是实现它的最有效方法。然后您也只调用了一次函数,这意味着VM解释了代码,这使得结果非常无趣?那就是I/O了!这不会给你一个真正的时间度量。我使用的测试文件有130000个名称。发布完整的基准测试-为JVM编写正确的微基准测试并不是那么容易,例如,你最好在定级之前至少调用每个方法一次[我认为最多几千次],等等。我敢打赌,在您的第一次测试中,类加载器还必须加载其他一些东西,等等。