JAVA—咖啡馆

——欢迎访问rogerfan的博客,常来《JAVA——咖啡馆》坐坐,喝杯浓香的咖啡,彼此探讨一下JAVA技术,交流工作经验,分享JAVA带来的快乐!本网站部分转载文章,如果有版权问题请与我联系。

BlogJava 首页 新随笔 联系 聚合 管理
  447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks
由于本人的一个低级失误,造成结论错误,for才是最终的胜者。foreach和iterator是类似的机制,性能都不是很好。以下代码已经重新调整,再次道歉。

以前一直有人说,foreach的性能有损失,不建议使用,今天特意测试了一下,结果是 for方式的性能最好,foreach次之,而Iterator循环性能最差..

1 完整的测试代码
view plaincopy to clipboardprint?
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 测试JAVA各种循环的性能。<br>
* for 方式的性能最好,foreach次之,而Iterator循环性能最差。
*
* @author 老紫竹研究室(laozizhu.com)
*/
public class TestLoop {
public static void main(String[] args) {
int number = 1000000;
// 我们构造一个列表
List<String> list = new ArrayList<String>(number);
for (int i = 0; i < number; i++) {
list.add(Integer.toString(i));
}
System.out.println("测试列表的性能...");
// 我们用foreach方式测试
long begin = System.nanoTime();
for (String i : list) {
testMethod(i);
}
System.out.printf("%10s=%10d\n", "foreach", System.nanoTime() - begin);
begin = System.nanoTime();
// 下面我们用Iterator测试
Iterator<String> it = list.iterator();
while (it.hasNext()) {
testMethod(it.next());
}
System.out.printf("%10s=%10d\n", "iterator", (System.nanoTime() - begin));

// 第三种,我们用index进行
begin = System.nanoTime();
for (int i = 0; i < number; i++) {
testMethod(list.get(i));
}
System.out.printf("%10s=%10d\n", "for", (System.nanoTime() - begin));
System.out.println("测试数组的性能...");
// 我们再来测试数组
String[] strArr = new String[number];
for (int i = 0; i < number; i++) {
strArr[i] = Integer.toString(i);
}
// 我们用foreach方式测试
begin = System.nanoTime();
for (String i : strArr) {
testMethod(i);
}
System.out.printf("%10s=%10d\n", "foreach", System.nanoTime() - begin);
// 第二种,我们用index进行
begin = System.nanoTime();
for (int i = 0; i < number; i++) {
testMethod(strArr[i]);
}
System.out.printf("%10s=%10d\n", "for", System.nanoTime() - begin);
}
public static void testMethod(String str) {
}
}

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 测试JAVA各种循环的性能。<br>
* for 方式的性能最好,foreach次之,而Iterator循环性能最差。
*
* @author 老紫竹研究室(laozizhu.com)
*/
public class TestLoop {
public static void main(String[] args) {
int number = 1000000;
// 我们构造一个列表
List<String> list = new ArrayList<String>(number);
for (int i = 0; i < number; i++) {
list.add(Integer.toString(i));
}
System.out.println("测试列表的性能...");
// 我们用foreach方式测试
long begin = System.nanoTime();
for (String i : list) {
testMethod(i);
}
System.out.printf("%10s=%10d\n", "foreach", System.nanoTime() - begin);
begin = System.nanoTime();
// 下面我们用Iterator测试
Iterator<String> it = list.iterator();
while (it.hasNext()) {
testMethod(it.next());
}
System.out.printf("%10s=%10d\n", "iterator", (System.nanoTime() - begin));

// 第三种,我们用index进行
begin = System.nanoTime();
for (int i = 0; i < number; i++) {
testMethod(list.get(i));
}
System.out.printf("%10s=%10d\n", "for", (System.nanoTime() - begin));
System.out.println("测试数组的性能...");
// 我们再来测试数组
String[] strArr = new String[number];
for (int i = 0; i < number; i++) {
strArr[i] = Integer.toString(i);
}
// 我们用foreach方式测试
begin = System.nanoTime();
for (String i : strArr) {
testMethod(i);
}
System.out.printf("%10s=%10d\n", "foreach", System.nanoTime() - begin);
// 第二种,我们用index进行
begin = System.nanoTime();
for (int i = 0; i < number; i++) {
testMethod(strArr[i]);
}
System.out.printf("%10s=%10d\n", "for", System.nanoTime() - begin);
}
public static void testMethod(String str) {
}
}

2 运行结果
测试列表的性能...
foreach= 41997864
iterator= 43951774
for= 14351289
测试数组的性能...
foreach= 1751863
for= 1484585

3 结论:
foreach的性能很一般,for才是最好的,推荐大家使用。
posted on 2009-05-14 11:34 rogerfan 阅读(357) 评论(0)  编辑  收藏 所属分类: 【Java知识】

只有注册用户登录后才能发表评论。


网站导航: