我是靠谱客的博主 调皮画板,这篇文章主要介绍java开发:LinkedList集合历遍为什么使用迭代器快于for循环,现在分享给大家,希望可以做个参考。

先来测试一下迭代器iterator和for循环的速度比较

new Thread(new Runnable() {
            @Override
            public void run() {
                LinkedList<String> list = new LinkedList<>();
                for(int i=0; i<10000; i++){
                    list.add(""+i);
                }

                long startTime = System.currentTimeMillis(); //获取开始时间
                for (int i = 0 ;i<list.size();i++){
                    System.out.println(list.get(i));
                }
                long endTime = System.currentTimeMillis(); //获取结束时间
                System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); //输出程序运行时间


                Iterator iterator =list.iterator();
                long startTime1=System.currentTimeMillis();  //获取开始时间
                while (iterator.hasNext()){
                    System.out.println(iterator.next().toString()); //输出程序运行时间
                }
                long endTime1=System.currentTimeMillis();  //获取结束时间
                System.out.println("程序运行时间:" + (endTime1 - startTime1) + "ms"); //输出程序运行时间
            }
        }).start();

上诉代码给LinkedList添加了一万条数据,然后使用for循环和Iterator 去历遍打印它们使用的时间,输出的时间分别是406毫秒和209毫秒。显然for循环的速度远远慢于迭代器。

2019-12-16 16:51:31.695 27965-27994/com.example.viewscrollapplication I/System.out: 程序运行时间:406ms
2019-12-16 16:51:31.904 27965-27994/com.example.viewscrollapplication I/System.out: 程序运行时间:209ms

为什么使用迭代器快于for循环呢?

我们知道LinkedList底层是基于双向链表实现的,如果我们使用for循环历遍:那我get(0)获取第一个节点,get(10)则它要从第一个节点开始一个一个往下找直到找到第十个节点,get(11)它又要重复上诉的方法去找到第十一节点,因此很浪费时间。使用迭代器呢,它是每取一个元素就把游标指向下一个节点,根据游标就可以得到下一个元素,因此不用像for循环一样那么耗时。
`

最后

以上就是调皮画板最近收集整理的关于java开发:LinkedList集合历遍为什么使用迭代器快于for循环的全部内容,更多相关java开发内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部