先来测试一下迭代器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开发内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复