java list三种遍历方法性能比较
2015-08-19 11:03
911 查看
从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象,测试代码如下:
[java] view
plaincopy
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进行遍历性能是最高的,求牛人解释?
你在每个for循环都分别加上这样的代码:
第一个循环. String str = tmp;
第二个循环 String str = list.get(i);
第三个循环 String str = iter.next();
然后性能就接近了
第一中循环相对其他的多个了一个构造局部变量tmp的开销所以时间比较多。如果都有构造对应的局部变量则性能开销相当了
[java] view
plaincopy
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进行遍历性能是最高的,求牛人解释?
你在每个for循环都分别加上这样的代码:
第一个循环. String str = tmp;
第二个循环 String str = list.get(i);
第三个循环 String str = iter.next();
然后性能就接近了
第一中循环相对其他的多个了一个构造局部变量tmp的开销所以时间比较多。如果都有构造对应的局部变量则性能开销相当了
相关文章推荐
- Struts2拦截器篇(一)
- java.lang.OutOfMemoryError: PermGen space及其解决方法
- atititt.java定时任务框架选型Spring Quartz 注解总结
- Java整型有序数组遍历一次输出其中重复的值
- [Java] 异常处理
- Java 对象与json数据的转换,续写
- 普通java类调用spring注解bean
- Java抽象类和接口
- JAVA学习(八):JAVA文件编程
- JAVA学习(八):JAVA文件编程
- 从零开始学JAVA DAY2
- springmvc 中 Instantiation of bean failed实例化Bean失败错误
- 使用Java操作ElasticSearch1.7程序
- 使用 Spring Data JPA 简化 JPA 开发
- Java线程:创建与启动
- cordova 项目导入eclipse中不显示assets和config.xm的解决方法
- Java中Comparator接口和Comparable接口的使用
- Java Classloader总结
- 【SSH2(实用文章)】--Struts2文件上传和下载的例子
- java 枚举类型enum 的使用