遍历ArrayList与LinkedList,使用FOR与迭代器的区别
网上结论:
如果是链表结构的集合,如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) 使用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与迭代器的区别的更多相关文章
- ArrayList、LinkedList、Vector、CopyOnWriteArrayList的区别和源码分析
1. ArrayList ArrayList 是一个数组队列,相当于动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAccess, ...
- ArrayList、LinkedList、HashMap的遍历及遍历过程中增、删元素
ArrayList.LinkedList.HashMap是Java中常用到的几种集合类型,遍历它们是时常遇到的情况.当然还有一些变态的时候,那就是在遍历的过程中动态增加或者删除其中的元素. 下面的例子 ...
- Java ArrayList和LinkedList
目录 集合的概念 集合体系结构 常用list集合 list集合的特点 ArrayList LinkedList 创建对象 常用方法 遍历 ArrayList和LinkedList的区别 集合的概念 ...
- ArrayList和LinkedList、Vector的优缺点?
一般在面试中可能会被问到ArrayList.LinkedList.Vector三者相关的区别! 一般来说我想大概都会回答如下的这些: ArrayList底层是数组结构,查询快,增删慢,线程不安全,效率 ...
- Java中ArrayList和LinkedList差别
一般大家都知道ArrayList和LinkedList的大致差别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机訪问get和set.A ...
- JAVA集合一:ArrayList和LinkedList
JAVA集合一:ArrayList和LinkedList 参考链接: HOW2J.CN 前言 这几篇博客重点记录JAVA的几个重要的集合框架:ArrayList.LinkedList.HashMap. ...
- 迭代器遍历列表 构造方法 constructor ArrayList Vector LinkedList Array List 时间复杂度
package priceton; import java.io.IOException; import java.util.concurrent.CyclicBarrier; import java ...
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转)
主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论. 通过本文你可以 ...
- ArrayList和LinkedList的几种循环遍历方式及性能对比分析
最新最准确内容建议直接访问原文:ArrayList和LinkedList的几种循环遍历方式及性能对比分析 主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性 ...
随机推荐
- Thunderbird Mail 支持 Microsoft Exchange
Thunderbird地址:https://www.mozilla.org/en-US/thunderbird/ 插件下载地址:https://addons.mozilla.org/zh-CN/thu ...
- Struct2(五)处理表单
简介: 1.表单的提交 表单和对应的Java模型的类 在此次的例子中,我们将会模仿一个用户提交表单的动作,具体提交表单做什么,不关心,我们需要知道 first last Name,Email addr ...
- HDU 4276 The Ghost Blows Light
K - The Ghost Blows Light Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- WustOJ 1575 Gingers and Mints(快速幂 + dfs )
1575: Gingers and Mints Time Limit: 1 Sec Memory Limit: 128 MB 64bit IO Format: %lldSubmitted: 24 ...
- LVM管理
一.步骤: 1.创建新的分区,并修改分区类型为8e 2.创建物理卷PV 3.将新建的PV添加到要扩展的VG中 4.用命令lvextend或lvresize来将新加入的PE添加到要扩展的LV中 5.用命 ...
- bat处理文件
bat处理文件 作用:可以一次性执行多个命令的文件. 为什么要学bat处理文件? 快速运行一个软件一般都会把软件打包一个jar包,但是jar双击可以运行仅对图形化界面的软件起作用,对于控制台的程序是不 ...
- Windows Server 2008搭建域控制器《转载51CTO.com》
Windows Server 2008搭建域控制器 引入 在小型网络中,管理员通常独立管理每一台计算机,如最为常用的用户管理.但当网络规模扩大到一定程度后,如超过 10 台计算机,而每台计算机上有 1 ...
- Kerberos-KDC
Kerberos提供一种较好的解决方案,它是由MIT发明的,Kerberos建立了一个安全的.可信任的密钥分发中心(KDC, Key Distribution Center).Kerberos是一种认 ...
- mp4文件格式之fragment mp4
目前网络上对mp4文件格式的总结已经相当多了,我就不在这里抄别人总结的东西了,想入门的话百度一下会有许多这方面的文章.这里介绍一下其他文章中很少涉及的一种mp4文件结构,即fragment mp4,也 ...
- web.config中的profile
aspnet_regsql命令创建需要的表结构 public class UserProfile:ProfileBase { [SettingsAllowAnonymous(true)] //默认匿名 ...