小编典典

比较Linkedlist和arraylist

java

我了解这LinkedList是作为双重链接列表实现的。它在add和remove上的性能优于Arraylist,但在get和set方法上却较差。

这是否意味着我应该选择LinkedListArraylist插入?

我写了一个小测试,发现ArrayList插入速度更快。那如何链表比ArrayList

请参考下面的示例。

    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);

        }

    }

阅读 233

收藏
2020-11-23

共1个答案

小编典典

Linkedlist确实在插入时速度更快,问题出在您的示例中。在您的代码中,您一直都需要附加到末尾。对于ArrayList,它与LinkedList一样容易。您应该做的是建立一个包含5000个项目的列表,然后开始在中间插入。在这里数组变慢了-
您必须一直将数组其余部分移到插入位置之后。这将显示出差异。分析事物的工作原理,不难理解原因。这是修改后的代码:

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);

        }
}
2020-11-23