comparison of Linkedlist over arraylist
本问题已经有最佳答案,请猛点这里访问。
我知道
这是否意味着我应该选择
我写了一个小测试,发现
请参考下面我已经做过的例子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import java.util.Date; import java.util.LinkedList; import java.util.List; public class TestLinkedList { public static void main(String[] args) { long lStartTime = new Date().getTime(); System.out.println("lStartTime::" + lStartTime); List<Integer> integerList = new LinkedList<Integer>(); for (int i = 0; i < 10000000; i++) { integerList.add(i); } long lEndTime = new Date().getTime(); System.out.println("lEndTime::" + lEndTime); long difference = lEndTime - lStartTime; System.out.println("Elapsed milliseconds:" + difference); } } |
插入到
LinkedList的插入速度确实更快,问题在于您的示例。在您的代码中,您可以通过一直附加到结尾来插入。对于ArrayList,它和LinkedList一样简单。你应该做的是列出5000个项目,然后开始在中间插入。在这里,数组变慢了——在插入位置之后,您必须一直移动数组的其余部分。这就是将显示差异的原因。分析事物是如何工作的,不难理解为什么。以下是修改后的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | import java.util.Date; import java.util.LinkedList; import java.util.ArrayList; import java.util.List; public class Prob { public static void main(String[] args) { long lStartTime = new Date().getTime(); System.out.println("lStartTime::" + lStartTime); List<Integer> integerList = new LinkedList<Integer>(); for (int i = 0; i < 5000; i++) { integerList.add(0, i); } for (int i = 0; i < 100000; i++) { integerList.add(1000, i); } long lEndTime = new Date().getTime(); System.out.println("lEndTime::" + lEndTime); long difference = lEndTime - lStartTime; System.out.println("Elapsed milliseconds:" + difference); } } |