网上结论:

如果是链表结构的集合,如LinkedList,则使用迭代器遍历,速度会更快(顺序获取)。

如果是数组结构的,如ArrayList,则使用for循环会更快(随机获取)

测试代码:

  1. package com.ckhuang.maven.confused;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Iterator;
  5. import java.util.LinkedList;
  6. import java.util.List;
  7.  
  8. /**
  9. * 验证遍历不同类型集合(基于数组的 and 基于链表的)<br/>
  10. * FOR 跟 迭代器Iterator 的性能区别
  11. *
  12. * @author ck.huang
  13. *
  14. */
  15. public class ShowDifForAndIterator {
  16.  
  17. /**
  18. * @param args
  19. */
  20. public static void main(String[] args) {
  21. // 集合大小
  22. int cSize = 80000;
  23.  
  24. validateArray(cSize);
  25. System.out.println("==========================================");
  26. validateLinked(cSize);
  27. }
  28.  
  29. private static void validateLinked(int cSize) {
  30. long insertStart = System.currentTimeMillis();
  31. LinkedList<Bussiness> list = createLinkedList(cSize);
  32. long insertEnd = System.currentTimeMillis();
  33. System.out.println("往 LinkedList 插入 " + cSize + "个对象,耗时:" + (insertEnd - insertStart));
  34.  
  35. doCompare(list, "LinkedList");
  36. }
  37.  
  38. private static void validateArray(int cSize) {
  39. long insertStart = System.currentTimeMillis();
  40. ArrayList<Bussiness> list = createArrayList(cSize);
  41. long insertEnd = System.currentTimeMillis();
  42. System.out.println("往 ArrayList 插入 " + cSize + "个对象,耗时:" + (insertEnd - insertStart));
  43.  
  44. doCompare(list, "ArrayList");
  45. }
  46.  
  47. private static void doCompare(List<Bussiness> list, String type) {
  48. long forStart = System.currentTimeMillis();
  49. doFor(list);
  50. long forEnd = System.currentTimeMillis();
  51. System.out.println(type + "(" + list.size() + ") 使用FOR 遍历,耗时:" + (forEnd - forStart));
  52.  
  53. long linkedStart = System.currentTimeMillis();
  54. doIterator(list);
  55. long linkedEnd = System.currentTimeMillis();
  56. System.out.println(type + "(" + list.size() + ") 使用Iterator遍历,耗时:" + (linkedEnd - linkedStart));
  57.  
  58. }
  59.  
  60. private static void doFor(List<Bussiness> list) {
  61. for (int i = 0; i < list.size(); i++) {
  62. Bussiness buss = list.get(i);
  63. buss.doSomething();
  64. }
  65. }
  66.  
  67. private static void doIterator(List<Bussiness> list) {
  68. Iterator<Bussiness> iterator = list.iterator();
  69. while (iterator.hasNext()) {
  70. Bussiness buss = iterator.next();
  71. buss.doSomething();
  72. }
  73. }
  74.  
  75. public static LinkedList<Bussiness> createLinkedList(int size) {
  76. LinkedList<Bussiness> list = new LinkedList<Bussiness>();
  77. for (int i = 0; i < size; i++) {
  78. list.add(new Bussiness());
  79. }
  80. return list;
  81. }
  82.  
  83. public static ArrayList<Bussiness> createArrayList(int size) {
  84. ArrayList<Bussiness> list = new ArrayList<Bussiness>();
  85. for (int i = 0; i < size; i++) {
  86. list.add(new Bussiness());
  87. }
  88. return list;
  89. }
  90.  
  91. }
  92.  
  93. class Bussiness {
  94. public void doSomething() {
  95. // do nothing..
  96. }
  97. }

结果:

往 ArrayList 插入 80000个对象,耗时:15

ArrayList(80000) 使用FOR 遍历,耗时:0

ArrayList(80000) 使用Iterator遍历,耗时:16

==========================================

往 LinkedList 插入 80000个对象,耗时:0

LinkedList(80000) 使用FOR 遍历,耗时:14570

LinkedList(80000) 使用Iterator遍历,耗时:16

后记:

1. 相对ArrayList,LinekedList的插入速度更快。

2. ArrayList使用FOR循环遍历,速度更快。

3. LinekedList使用Iterator遍历,速度更快。

遍历ArrayList与LinkedList,使用FOR与迭代器的区别的更多相关文章

  1. ArrayList、LinkedList、Vector、CopyOnWriteArrayList的区别和源码分析

    1. ArrayList ArrayList 是一个数组队列,相当于动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAccess, ...

  2. ArrayList、LinkedList、HashMap的遍历及遍历过程中增、删元素

    ArrayList.LinkedList.HashMap是Java中常用到的几种集合类型,遍历它们是时常遇到的情况.当然还有一些变态的时候,那就是在遍历的过程中动态增加或者删除其中的元素. 下面的例子 ...

  3. Java ArrayList和LinkedList

    目录 集合的概念 集合体系结构 常用list集合 list集合的特点 ArrayList LinkedList 创建对象 常用方法 遍历 ArrayList和LinkedList的区别 集合的概念 ​ ...

  4. ArrayList和LinkedList、Vector的优缺点?

    一般在面试中可能会被问到ArrayList.LinkedList.Vector三者相关的区别! 一般来说我想大概都会回答如下的这些: ArrayList底层是数组结构,查询快,增删慢,线程不安全,效率 ...

  5. Java中ArrayList和LinkedList差别

    一般大家都知道ArrayList和LinkedList的大致差别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.  2.对于随机訪问get和set.A ...

  6. JAVA集合一:ArrayList和LinkedList

    JAVA集合一:ArrayList和LinkedList 参考链接: HOW2J.CN 前言 这几篇博客重点记录JAVA的几个重要的集合框架:ArrayList.LinkedList.HashMap. ...

  7. 迭代器遍历列表 构造方法 constructor ArrayList Vector LinkedList Array List 时间复杂度

    package priceton; import java.io.IOException; import java.util.concurrent.CyclicBarrier; import java ...

  8. ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转)

    主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论. 通过本文你可以 ...

  9. ArrayList和LinkedList的几种循环遍历方式及性能对比分析

    最新最准确内容建议直接访问原文:ArrayList和LinkedList的几种循环遍历方式及性能对比分析 主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性 ...

随机推荐

  1. 格式化用jad反编译混淆过的代码,能去大部分错误 (zhuanzai)

    http://blog.csdn.net/chruan/article/details/8484783

  2. hdu Number Sequence

    这道题是寻找规律.别的方法一般都是超时. #include <cstdio> #include <cstring> #include <algorithm> usi ...

  3. Android Studio 设置LogCat 颜色

    1. File -> Settings ->Search LogCat 2. Save a schema first, for instance: MyLogCatStyle 3. cho ...

  4. debuggap,移动端调试新方式

    最近发现了一个移动端调试的新技能,这里简单描述一下基本情况. 移动端调试常遇到的问题 手机访问只能看到页面的展现,除此之外看不到任何其他信息 无法像调试PC页面那么方便的查看js.dom.networ ...

  5. java.sql.SQLException:指定了无效的 Oracle URL

    java.sql.SQLException:指定了无效的 Oracle URL 昨天晚上用MyEclipse连接Oracle,出现了" java.sql.SQLException: 指定了无 ...

  6. testng跑失败用例重试

    testng 提高用例通过率,失败用例要重新运行一次 步骤: 1.新建一个Retry 类,implements IRetryAnalyzer接口,这个类里面确定重跑次数,以及分析每次失败是否需要重新运 ...

  7. Pojo和JavaBean的区别(转载)

    OJO(Plain Old Java Object)这个名字用来强调它是一个普通java对象,而不是一个特殊的对象. 2005年11月时,“POJO”主要用来指代那些没用遵从特定的Java对象模型,约 ...

  8. html的特质语义:微格式及其他(重点介绍其中两种)

    今天再次翻开html的书本, 感觉过了个周末似乎生疏了许多, 虽然我是刚接触html的, 但是对于他还是抱有极其大的兴趣的, 所以不爱看书的我, 也开始一遍遍的翻阅着书本, 寻找解决问题的方法, 下面 ...

  9. OWIN启动项的检测

    OWIN启动项的检测 通过以下方法设置启动项: 命名约定 Katana在命名空间内查找StartUp类 OwinStartup Attribute [assembly: OwinStartup(typ ...

  10. vs2015升级后台mvc视图编辑器默认不是razor视图引擎问题

    1.问题的原因 vs2013中创建的mvc4.0应用默认使用的razor2.0版本 在vs2015编辑器中默认使用的razor视图引擎是3.0版本 解决方案: 第一步:升级mvc应用的版本为mvc5. ...