`
pda158
  • 浏览: 189908 次
社区版块
存档分类
最新评论

Java list三种遍历方法性能比较

阅读更多

从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象,测试代码例如以下:

package com.hisense.tiger.list;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ListTest {
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
long t1,t2;
for(int j = 0; j < 10000000; j++)
{
list.add("aaaaaa" + j);
}
System.out.println("List first visit method:");
t1=System.currentTimeMillis();
for(String tmp:list)
{
//System.out.println(tmp);
}
t2=System.currentTimeMillis();
System.out.println("Run Time:" + (t2 -t1) + "(ms)");
System.out.println("List second visit method:");
t1=System.currentTimeMillis();
for(int i = 0; i < list.size(); i++)
{
list.get(i);
//System.out.println(list.get(i));
}
t2=System.currentTimeMillis();
System.out.println("Run Time:" + (t2 -t1) + "(ms)");
System.out.println("List Third visit method:");
Iterator<String> iter = list.iterator();
t1=System.currentTimeMillis();
while(iter.hasNext())
{
iter.next();
//System.out.println(iter.next());
}
t2=System.currentTimeMillis();
System.out.println("Run Time:" + (t2 -t1) + "(ms)");
System.out.println("Finished!!!!!!!!");
}
}

 测试结果例如以下:

  List first visit method:
  Run Time:170(ms)
  List second visit method:
  Run Time:10(ms)
  List Third visit method:
  Run Time:34(ms)
  Finished!!!!!!!!
  测试的结论非常奇怪,第一种方法是java语言支持的新语法,代码最简洁,可是在三种方法中,性能确是最差的,取size进行遍历性能是最高的,求牛人解释?
2
0
分享到:
评论
7 楼 王新春 2015-03-10  
jdk:1.6.0_43的版本

List first visit method:
Run Time:77(ms)
List second visit method:
Run Time:74(ms)
List Third visit method:
Run Time:71(ms)
Finished!!!!!!!!
所以三种方式几乎没有差异
6 楼 bulot 2014-11-21  
在jdk1.7下面结果
List first visit method:
Run Time:605(ms)
List second visit method:
Run Time:717(ms)
List Third visit method:
Run Time:600(ms)
Finished!!!!!!!!

在第二种方法中如果把list.size() 抽取出来,结果为
List first visit method:
Run Time:600(ms)
List second visit method:
Run Time:373(ms)
List Third visit method:
Run Time:565(ms)
Finished!!!!!!!!

楼主的测试方法有改进的地方~~
5 楼 ArthurTsang 2014-11-21  
foreach4 写道
kidding87 写道
这样才是公平的
for(int i = 0; i < list.size(); i++)  
		{  
		String tmp = list.get(i);  
		//System.out.println(list.get(i));  
		} 


while(iter.hasNext())  
		{  
			String tmp = iter.next();  
		//System.out.println(iter.next());  
		}  


注释的代码也会编译吗


说的是赋值给tmp吧
4 楼 foreach4 2014-11-21  
kidding87 写道
这样才是公平的
for(int i = 0; i < list.size(); i++)  
		{  
		String tmp = list.get(i);  
		//System.out.println(list.get(i));  
		} 


while(iter.hasNext())  
		{  
			String tmp = iter.next();  
		//System.out.println(iter.next());  
		}  


注释的代码也会编译吗
3 楼 kidding87 2014-11-21  
这样才是公平的
for(int i = 0; i < list.size(); i++)  
		{  
		String tmp = list.get(i);  
		//System.out.println(list.get(i));  
		} 


while(iter.hasNext())  
		{  
			String tmp = iter.next();  
		//System.out.println(iter.next());  
		}  

2 楼 foreach4 2014-11-21  
看来还是要用原始的方法进行遍历list了,可是, 你用的是哪个版本测试的呢
1 楼 tiant 2014-11-21  
第一种方式从list中取出的值,需要赋值给 tmp 变量,所以效率低。

相关推荐

    java中List对象集合的遍历方法(三个)

    java中List对象集合的遍历方法 第一种: for(Iterator&lt;A&gt; it = list.iterator(); it.hasNext(); ) { .... } 这种方式在循环执行过程中会进行数据锁定, 性能稍差, 同时,如果你想在寻欢过程中去掉某个元素,只能...

    java遍历list集合3种方式和性能对比

    遍历list集合

    Java遍历集合方法分析(实现原理、算法性能、适用场合)

    除此之外,Java对于数据集合的遍历,也提供了几种不同的方式。开发人员必须要清楚的明白每一种遍历方式的特点、适用场合、以及在不同底层实现上的表现。下面就详细分析一下这一块内容。 数据元素是怎样在内存中存放...

    Java中ArrayList和LinkedList的遍历与性能分析

    主要给大家介绍了ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论。相信对大家的理解和学习具有一定的参考价值,有需要的...

    java源码包---java 源码 大量 实例

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字  Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象...

    JAVA上百实例源码以及开源项目源代码

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字  Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象...

    JAVA上百实例源码以及开源项目

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字  Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象...

    java源码包4

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字  Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics...

    java源码包3

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字  Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics...

    java源码包2

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字  Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java波浪文字制作方法及源代码 1个目标文件 摘要:Java源码,初学实例,波浪文字 Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,...

    字节大佬总结的Java面试资料

    集合类存放于 Java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。 1. Collection:Collection 是集合 List、Set、Queue 的最基本的接口。 2. Iterator:迭代器,可以通过迭代器遍历集合中...

    40道java集合面试题含答案(很全很详细)

    Java集合类是Java.util包中的重要内容,它提供了一套性能优良、使用方便的接口和类,用于处理对象的集合。这些类主要用于存储、检索、操作一组对象数据。 Java集合类主要包括两种类型的容器:Collection和Map。...

    JAVA面试题最全集

    数据结构,如何遍历List中的元素? 如果要按照键值保存或者访问数据,使用什么数据结构? 要掌握Collection相关的接口和类的使用 56.使用StringBuffer类与String类进行字符串连接时有何区别? 57.调用Thread类的...

    java高级编程必须知道的集合详细讲解

    集合框架的性能和选择: 探讨集合框架中各种实现类的性能比较,讲解如何根据需求选择合适的集合类型。介绍优化集合性能的方法。 集合类型: 详细介绍集合框架中的各种集合类型,包括 List、Set、Map 以及 Queue 等。...

    Java集合框架.pdf

    2、高性能:Java集合框架中的数据结构和算法经过优化,可以提供高效的性能。 3、类型安全:Java集合框架是类型安全的,即只能存储指定类型的对象,不允许存储不同类型的对象。 4、线程安全:Java集合框架中的某些...

    疯狂JAVA讲义

    2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML(统一建模语言)介绍 29 2.2.1 用例图 30 2.2.2 类图 31 2.2.3 组件图 33 2.2.4 部署图 33 2.2.5 顺序图 ...

    java 面试题 总结

    通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 8、EJB是基于哪些技术实现的?并说出Session...

Global site tag (gtag.js) - Google Analytics