当前位置: 首页 > 知识库问答 >
问题:

测量时间不能确认LinkedList优势

盛城
2023-03-14

我正在阅读ArrayListLinkedList之间的区别,在何时使用LinkedList而不是ArrayList?中指出了这一点。我开发了一个小示例applcation来测试LinkedList的一个主要优点,但我获得的结果并没有证实LinkedList在操作性能方面超过了ArrayList

ListIterator.add(E element)
public static void main(String[] args) {

        int number = 100000;

        long startTime1 = System.currentTimeMillis();
        fillLinkedList(number);
        long stopTime1 = System.currentTimeMillis();

        long startTime2 = System.currentTimeMillis();
        fillArrayList(number);
        long stopTime2 = System.currentTimeMillis();

        System.out.println(" LinkedList needed: "+ (stopTime1 - startTime1));
        System.out.println(" ArrayList needed: "+ (stopTime2 - startTime2));

    }


    public static void fillLinkedList(int number){

        LinkedList<Integer> list = new LinkedList<Integer>();
        ListIterator<Integer> it = list.listIterator();
        int i = 0;
        while(i++<number){
            it.add(i);
        }
    //  System.out.println("LinkedList size: "+list.size());

    }


    public static void fillArrayList(int number){
        ArrayList<Integer> list = new ArrayList<Integer>();
        ListIterator<Integer> it = list.listIterator();
        int i = 0;
        while(i++<number){
            it.add(i);
        }
    //  System.out.println("ArrayList size: "+list.size());
    }
number            10,000     100,000     500,000      1,000,000     5,000,000

ArrayList            7         17         60             77           170

LinkedList           7         21         89             838          4127

我注意到元素的增加显著降低了LinkedList的性能,而ArrayList则表现得更好。我明白了什么假的吗?

共有1个答案

周马鲁
2023-03-14

ArrayList在容器末尾或非常近的地方添加元素时速度更快,因为这样就不需要移位许多元素。它是缓慢的,当添加在中间或开始。我将您的循环更改为以下内容:

    while(i++<number){
        it.add(i);
        if(i%2 == 0)
            it.previous();
    }

现在,将始终指向列表的中间。有了这个基准,LinkedList要快得多。200000的结果:

LinkedList needed: 47
ArrayList needed: 4702
 类似资料:
  • 问题内容: 在Go中精确测量持续时间的正确方法是什么?大多数应用程序仅使用标准时间包和以下方法: 但是,返回当前系统时间,这导致两个缺陷: 如果在测量过程中更改了系统时间(例如,由于 时区更改 (DST)或 leap秒 ),则所产生的持续时间也是错误的。 系统时间可能故意比实时时间变慢或变慢。当操作系统将内部时钟与NTP时间服务器同步时,通常会发生这种情况(每小时可能发生几次!) 从MSDN: [

  • 问题内容: 我需要测量程序某些部分所花费的时间(不是用于调试,而是作为输出中的功能)。准确性很重要,因为总时间将不到一秒钟。 当我遇到timeit时,我将使用time模块,该模块声称 避免了一些用于度量执行时间的常见陷阱 。不幸的是,它有一个糟糕的接口,需要一个字符串作为输入,然后才是eval的。 __ 因此,我是否需要使用此模块来准确地测量时间,还是时间足够?它指的是什么陷阱? 谢谢 问题答案:

  • 启动时间测量 main函数执行之前 增加启动环境变量, 统计main函数启动前所使用的时长 Product -> Scheme -> Edit Scheme: Run -> Environment Variables下新增变量DYLD_PRINT_STATISTICS Value为 1 运行工程, 启动后, 控制台便可看到统计时间 main函数启动时间 在main函数中记录启动时间 在AppDel

  • 我曾尝试用谷歌搜索这个,但没有成功。如果我使用的是,并且我有一个用Java编写的客户机,那么消息何时被确认?我正在使用一个,它包含一个方法。确认信息是在完成之前还是在完成之后或在其他时间点发送回服务器?提前感谢任何人提供的任何帮助!