就是有些人循環用的是普通for循環,有些人用的是foreach循環,它們之間有什么區別?應該在什么時候使用這兩種循環了?
兩種循環的語法格式:
普通for循環語法:
- for (int i = 0; i < integers.length; i++) {
- System.out.println(intergers[i]);
- }
foreach 循環語法:
- for(Integer in : integers){
- System.out.println(in);
- }
今天我們來比較一下兩種for循環對ArrayList和LinkList集合的循環性能比較。首先簡單的了解一下ArrayList和LinkList的區別:
ArrayList:ArrayList是采用數組的形式保存對象的,這種方式將對象放在連續的內存塊中,所以插入和刪除時比較麻煩,查詢比較方便。
LinkList:LinkList是將對象放在獨立的空間中,而且每個空間中還保存下一個空間的索引,也就是數據結構中的鏈表結構,插入和刪除比較方便,但是查找很麻煩,要從第一個開始遍歷。
下面是我測試的代碼:
- public class Main {
- public static void main(String[] args){
- //實例化arrayList
- List<Integer> arrayList = new ArrayList<Integer>();
- //實例化linkList
- List<Integer> linkList = new LinkedList<Integer>();
- //插入10萬條數據
- for (int i = 0; i < 100000; i++) {
- arrayList.add(i);
- linkList.add(i);
- }
- int array = 0;
- //用for循環arrayList
- long arrayForStartTime = System.currentTimeMillis();
- for (int i = 0; i < arrayList.size(); i++) {
- array = arrayList.get(i);
- }
- long arrayForEndTime = System.currentTimeMillis();
- System.out.println("用for循環arrayList 10萬次花費時間:" + (arrayForEndTime - arrayForStartTime) + "毫秒");
- //用foreach循環arrayList
- long arrayForeachStartTime = System.currentTimeMillis();
- for(Integer in : arrayList){
- array = in;
- }
- long arrayForeachEndTime = System.currentTimeMillis();
- System.out.println("用foreach循環arrayList 10萬次花費時間:" + (arrayForeachEndTime - arrayForeachStartTime ) + "毫秒");
- //用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循環linkList 10萬次花費時間:" + (linkForEndTime - linkForStartTime) + "毫秒");
- //用froeach循環linkList
- long linkForeachStartTime = System.currentTimeMillis();
- for(Integer in : linkList){
- link = in;
- }
- long linkForeachEndTime = System.currentTimeMillis();
- System.out.println("用foreach循環linkList 10萬次花費時間:" + (linkForeachEndTime - linkForeachStartTime ) + "毫秒");
- }
- }
循環10萬次的時候,控制台打印結果:
- 用for循環arrayList 10萬次花費時間:5毫秒
- 用foreach循環arrayList 10萬次花費時間:7毫秒
- 用for循環linkList 10萬次花費時間:4481毫秒
- 用foreach循環linkList 10萬次花費時間:5毫秒
可以看出,循環ArrayList時,普通for循環比foreach循環花費的時間要少一點;循環LinkList時,普通for循環比foreach循環花費的時間要多很多。
當我將循環次數提升到一百萬次的時候,循環ArrayList,普通for循環還是比foreach要快一點;但是普通for循環在循環LinkList時,程序直接卡死。
結論:需要循環數組結構的數據時,建議使用普通for循環,因為for循環采用下標訪問,對於數組結構的數據來說,采用下標訪問比較好。
需要循環鏈表結構的數據時,一定不要使用普通for循環,這種做法很糟糕,數據量大的時候有可能會導致系統崩潰。
