在《Java中ArrayList的fori和foreach效率比較》中對ArrayList的兩種循環方式進行了比較,本次對LinkedList的兩種遍歷方式進行效率的比較。
1. 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;
}
}
- 【代碼實例1】
public static void main(String[] args) {
List<Student> list = new LinkedList<Student>();
int maxNum = 100000;
for (int i = 0; i < maxNum; i++) {
list.add(new Student("student" + i, i));
}
//開始測試不同方式的for性能
int listSize = list.size();
String searchName = "student666";
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: 28628
forearch: 10
2. list元素為Integer
- 【代碼實例2】
public static void main(String[] args) {
List<Integer> list = new LinkedList<Integer>();
int maxNum = 10000;
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 (searchVal.equals(val)) {
searchFlag = true;
}
}
long endTime1 = System.currentTimeMillis();
//foreach形式
long startTime2 = System.currentTimeMillis();
for (Integer val : list) {
if (searchVal.equals(val)) {
searchFlag = true;
}
}
long endTime2 = System.currentTimeMillis();
//輸出運行時間
System.out.println("fori: " + (endTime1 - startTime1));
System.out.println("forearch: " + (endTime2 - startTime2));
}
- 【運行結果】
fori: 55
forearch: 2
3. 結果分析及結論
從【代碼實例1】和【代碼實例2】的多次運行結果來看,fori的性能是遠落后於foreach的性能。可以看出,當list為LinkedList的時候,建議使用foreach的方式來遍歷,效率較高。以上結果是在上述代碼的條件下得出的,僅供參考。