以前一直有人說,foreach的性能有損失,不建議使用,今天特意測試了一下,結(jié)果是 for方式的性能,foreach次之,而Iterator循環(huán)性能最差..
1 完整的測試代碼
view plaincopy to clipboardprint?
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 測試JAVA各種循環(huán)的性能。
* for 方式的性能,foreach次之,而Iterator循環(huán)性能最差。
*
* @author 考試大
*/
public class TestLoop {
public static void main(String[] args) {
int number = 1000000;
// 我們構(gòu)造一個(gè)列表
List list = new ArrayList(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 it = list.iterator();
while (it.hasNext()) {
testMethod(it.next());
}
System.out.printf("%10s=%10d\n", "iterator", (System.nanoTime() - begin));
// 第三種,我們用index進(jìn)行
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("測試數(shù)組的性能...");
// 我們再來測試數(shù)組
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進(jìn)行
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各種循環(huán)的性能。
* for 方式的性能,foreach次之,而Iterator循環(huán)性能最差。
*
* @author 考試大
*/
public class TestLoop {
public static void main(String[] args) {
int number = 1000000;
// 我們構(gòu)造一個(gè)列表
List list = new ArrayList(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 it = list.iterator();
while (it.hasNext()) {
testMethod(it.next());
}
System.out.printf("%10s=%10d\n", "iterator", (System.nanoTime() - begin));
// 第三種,我們用index進(jìn)行
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("測試數(shù)組的性能...");
// 我們再來測試數(shù)組
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進(jìn)行
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 運(yùn)行結(jié)果
測試列表的性能...
foreach= 41997864
iterator= 43951774
for= 14351289
測試數(shù)組的性能...
foreach= 1751863
for= 1484585
3 結(jié)論:
foreach的性能很一般,for才是的,推薦大家使用。
1 完整的測試代碼
view plaincopy to clipboardprint?
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* 測試JAVA各種循環(huán)的性能。
* for 方式的性能,foreach次之,而Iterator循環(huán)性能最差。
*
* @author 考試大
*/
public class TestLoop {
public static void main(String[] args) {
int number = 1000000;
// 我們構(gòu)造一個(gè)列表
List
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
while (it.hasNext()) {
testMethod(it.next());
}
System.out.printf("%10s=%10d\n", "iterator", (System.nanoTime() - begin));
// 第三種,我們用index進(jìn)行
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("測試數(shù)組的性能...");
// 我們再來測試數(shù)組
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進(jìn)行
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各種循環(huán)的性能。
* for 方式的性能,foreach次之,而Iterator循環(huán)性能最差。
*
* @author 考試大
*/
public class TestLoop {
public static void main(String[] args) {
int number = 1000000;
// 我們構(gòu)造一個(gè)列表
List
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
while (it.hasNext()) {
testMethod(it.next());
}
System.out.printf("%10s=%10d\n", "iterator", (System.nanoTime() - begin));
// 第三種,我們用index進(jìn)行
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("測試數(shù)組的性能...");
// 我們再來測試數(shù)組
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進(jìn)行
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 運(yùn)行結(jié)果
測試列表的性能...
foreach= 41997864
iterator= 43951774
for= 14351289
測試數(shù)組的性能...
foreach= 1751863
for= 1484585
3 結(jié)論:
foreach的性能很一般,for才是的,推薦大家使用。