遍历ArrayList与LinkedList,使用FOR与迭代器的区别
2014-03-13 13:52
357 查看
网上结论:
测试代码:
结果:
后记:
1. 相对ArrayList,LinekedList的插入速度更快。
2. ArrayList使用FOR循环遍历,速度更快。
3. LinekedList使用Iterator遍历,速度更快。
如果是链表结构的集合,如LinkedList,则使用迭代器遍历,速度会更快(顺序获取)。 如果是数组结构的,如ArrayList,则使用for循环会更快(随机获取) |
package com.ckhuang.maven.confused; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; /** * 验证遍历不同类型集合(基于数组的 and 基于链表的)<br/> * FOR 跟 迭代器Iterator 的性能区别 * * @author ck.huang * */ public class ShowDifForAndIterator { /** * @param args */ public static void main(String[] args) { // 集合大小 int cSize = 80000; validateArray(cSize); System.out.println("=========================================="); validateLinked(cSize); } private static void validateLinked(int cSize) { long insertStart = System.currentTimeMillis(); LinkedList<Bussiness> list = createLinkedList(cSize); long insertEnd = System.currentTimeMillis(); System.out.println("往 LinkedList 插入 " + cSize + "个对象,耗时:" + (insertEnd - insertStart)); doCompare(list, "LinkedList"); } private static void validateArray(int cSize) { long insertStart = System.currentTimeMillis(); ArrayList<Bussiness> list = createArrayList(cSize); long insertEnd = System.currentTimeMillis(); System.out.println("往 ArrayList 插入 " + cSize + "个对象,耗时:" + (insertEnd - insertStart)); doCompare(list, "ArrayList"); } private static void doCompare(List<Bussiness> list, String type) { long forStart = System.currentTimeMillis(); doFor(list); long forEnd = System.currentTimeMillis(); System.out.println(type + "(" + list.size() + ") 使用FOR 遍历,耗时:" + (forEnd - forStart)); long linkedStart = System.currentTimeMillis(); doIterator(list); long linkedEnd = System.currentTimeMillis(); System.out.println(type + "(" + list.size() + ") 使用Iterator遍历,耗时:" + (linkedEnd - linkedStart)); } private static void doFor(List<Bussiness> list) { for (int i = 0; i < list.size(); i++) { Bussiness buss = list.get(i); buss.doSomething(); } } private static void doIterator(List<Bussiness> list) { Iterator<Bussiness> iterator = list.iterator(); while (iterator.hasNext()) { Bussiness buss = iterator.next(); buss.doSomething(); } } public static LinkedList<Bussiness> createLinkedList(int size) { LinkedList<Bussiness> list = new LinkedList<Bussiness>(); for (int i = 0; i < size; i++) { list.add(new Bussiness()); } return list; } public static ArrayList<Bussiness> createArrayList(int size) { ArrayList<Bussiness> list = new ArrayList<Bussiness>(); for (int i = 0; i < size; i++) { list.add(new Bussiness()); } return list; } } class Bussiness { public void doSomething() { // do nothing.. } }
结果:
往 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遍历,速度更快。
相关文章推荐
- Spring MVC多视图配置
- c#.net常用字符串函数 (转)
- Samba使用smbpasswd实现user安全级别配置
- UDP传输
- 读书笔记-锁
- Struts2拦截器的使用 (详解)
- Android读取网络资源
- Oracle创建表语句(Create table)语法详解及示例
- Java泛型
- Android手机客户端使用QQ登录
- ubuntu搭建DNS
- Easyui treegrid复选框设置
- linux 网卡 攻略
- linux安全体系
- Extjs不错的博客
- c++ 可变参数自定义print c/c++如何写一个带可变参数的函数
- android 优化
- javac -classpath 编译servlet
- 用shell来写tcp的客户端测试wsv的情况
- ASP.net第二周作业(二)