1. list的元素為Integer
- 【代碼實例1】
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
int maxNum = 1000000;
for (int i = 0; i < maxNum; i++) {
list.add(i);
}
//開始測試不同方式的for性能
int listSize = list.size();
Integer searchVal = 66666;
boolean searchFlag = false;
//基本形式的for循環
long startTime1 = System.currentTimeMillis();
for (int i = 0; i < listSize; i++) {
Integer val = list.get(i);
if (val.equals(searchVal)) {
searchFlag = true;
}
}
long endTime1 = System.currentTimeMillis();
//foreach形式
long startTime2 = System.currentTimeMillis();
for (Integer val : list) {
if (val.equals(searchVal)) {
searchFlag = true;
}
}
long endTime2 = System.currentTimeMillis();
//輸出運行時間
System.out.println("fori: " + (endTime1 - startTime1));
System.out.println("forearch: " + (endTime2 - startTime2));
}
- 【運行結果】
fori: 5
forearch: 8
2. list的元素為自定義對象
- 自定義的Student類
public class Student {
private String name;
private Integer age;
public Student(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
}
- 【代碼實例2】
public static void main(String[] args) {
List<Student> list = new ArrayList<Student>();
int maxNum = 1000000;
for (int i = 0; i < maxNum; i++) {
list.add(new Student("student" + i, i));
}
//開始測試不同方式的for性能
int listSize = list.size();
String searchName = "student6666";
boolean searchFlag = false;
//基本形式的for循環
long startTime1 = System.currentTimeMillis();
for (int i = 0; i < listSize; i++) {
Student val = list.get(i);
if (searchName.equals(val.getName())) {
searchFlag = true;
}
}
long endTime1 = System.currentTimeMillis();
//foreach形式
long startTime2 = System.currentTimeMillis();
for (Student stu : list) {
if (searchName.equals(stu.getName())) {
searchFlag = true;
}
}
long endTime2 = System.currentTimeMillis();
//輸出運行時間
System.out.println("fori: " + (endTime1 - startTime1));
System.out.println("forearch: " + (endTime2 - startTime2));
}
- 【運行結果】
fori: 17
forearch: 18
3. 分析
【代碼實例1】經過多次運行,可以看出fori確實始終比foreach快,而且在本次的測試中,快的時間還不少。【代碼實例2】中list的元素換成了自定義的對象,經過多次運行,時間都差不多,甚至有時兩者的運行時間相同。如果非得要對fori和foreach進行循環效率的比較的話,還是建議使用fori的方式。本結果只是針對ArrayList在上述兩個測試程序中測試出的結果,僅供參考。