我在另一个问题中询问为什么在阅读文件和创建列表时,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()来测量时间。
答案 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测试每个列表,并查看差异是否为线性以及实现的比较方式。
除了在开头和结尾插入外,测试将项目插入列表中间所需的时间可能会很有趣。