有些人循環用的是普通for循環,
有些人用的是增強for循環,
它們之間有什麼差別?應該在什麼時候使用這兩種循環了?
==========文法格式==========
普通for循環文法:
for (int i = 0; i < integers.length; i++) {
System.out.println(intergers[i]);
}
增強for循環文法:
for(Integer in : integers){
System.out.println(in);
}
今天我們來比較一下兩種for循環對ArrayList和LinkList集合的循環性能比較。首先簡單的了解一下ArrayList和LinkList的差別:
ArrayList是采用數組的形式儲存對象的,這種方式将對象放在連續的記憶體塊中,是以插入和删除時比較麻煩,查詢比較友善。
LinkList是将對象放在獨立的空間中,而且每個空間中還儲存下一個空間的索引,也就是資料結構中的連結清單結構,插入和删除比較友善,但是查找很麻煩,要從第一個開始周遊。
将ArrayList和LinkList分别插入10萬條記錄
測試代碼:
package utils;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ForEach {
public static void main(String[] args) {
List<Integer> arrayList = new ArrayList<Integer>();
List<Integer> linkList = new LinkedList<Integer>();
// 每個集合插入10萬條資料
for (int i = 0; i < 100000; i++) {
arrayList.add(i);
linkList.add(i);
}
int arry = 0;
System.out.println("============周遊arrayList============");
// 用for循環arrayList
long forStartTime = System.currentTimeMillis();
for (int i = 0; i < arrayList.size(); i++) {
arry = arrayList.get(i);
}
long forEndTime = System.currentTimeMillis();
System.out.println("for周遊需要:" + (forEndTime - forStartTime) + "毫秒");
// 用增強for循環arrayList
long forUpStartTime = System.currentTimeMillis();
for (Integer in : arrayList) {
arry = in;
}
long forUpEndTime = System.currentTimeMillis();
System.out.println("增強for周遊需要:" + (forUpEndTime - forUpStartTime) + "毫秒");
System.out.println("============linkList============");
// 用for循環linkList
long linkForStartTime = System.currentTimeMillis();
int link = 0;
for (int i = 0; i < linkList.size(); i++) {
link = linkList.get(i);
}
long linkForEndTime = System.currentTimeMillis();
System.out.println("for周遊:" + (linkForEndTime - linkForStartTime) + "毫秒");
// 用增強for循環linkList
long linkForeachStartTime = System.currentTimeMillis();
for (Integer in : linkList) {
link = in;
}
long linkForeachEndTime = System.currentTimeMillis();
System.out.println("用增強for周遊需要:" + (linkForeachEndTime - linkForeachStartTime) + "毫秒");
}
}
運作結果:
java 普通for循環與增強for循環的性能對比 可以看出,循環ArrayList時,普通for循環比foreach循環花費的時間要少一點;循環LinkList時,普通for循環比foreach循環花費的時間要多很多。當我将循環次數提升到一百萬次的時候,循環ArrayList,普通for循環還是比foreach要快一點;但是普通for循環在循環LinkList時,程式直接卡死。
結論:需要循環數組結構的資料時,建議使用普通for循環,因為for循環采用下标通路,對于數組結構的資料來說,采用下标通路比較好。
需要循環連結清單結構的資料時,一定不要使用普通for循環,這種做法很糟糕,資料量大的時候有可能會導緻系統崩潰。