最近在思考一個問題,公司里很多人寫代碼,都是用增強型的for循環,就是for(:),這種格式的代碼,我一般用的是for(;;***)這種格式的,今天試著去比較了一下這兩種的區別。
總的來說,如果用數組實現的,那最好用普通for循環,因為下標索引速度更快。增強型的for循環,其實是用iterator迭代器來做的,迭代器適合鏈表格式的存儲結構。
所以,公司里很多人的代碼都不規范,或者沒有考慮效率問題,只是單純的完成系統功能,這是很不負責任的做法。為一個公司做事,就要把代碼優化到最好,比如用普通型for循環,我們可以先在第一步算出集合的大小,這樣就省去了每次都要計算集合大小。
** int size =arraylist.size(); for(int i=0;i<size;i++)**
這樣做,就提高了代碼的效率了。
寫了一段代碼來印證自己的理論:
package com.netease.corp;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ForIterator {
private static long MAX_NUMBER=100000;
public static void main(String[] args) {
List<Integer> linkedList=new LinkedList<Integer>();
List<Integer> arrayList=new ArrayList<Integer>();
for(int i=0;i<MAX_NUMBER;i++){ //給兩個list賦值
linkedList.add(100);
arrayList.add(100);
}
getForCirculationTime(linkedList);
getForCirculationTime(arrayList);
}
/**
* 方法功能:獲取兩種for循環的時間
* @param lists
*/
public static void getForCirculationTime(List<Integer> lists){
long starTime=System.currentTimeMillis();
int n=0;
int size=lists.size();
for(int i=0;i<size;i++){
n=lists.get(i);
}
Class s =lists.getClass(); //獲取class的名
String name=s.getName();
System.out.println(s+"普通for循環 調用get方法花的時間:"+(System.currentTimeMillis()-starTime));
starTime=System.currentTimeMillis();
for(int in:lists){
n=in;
}
System.out.println(s+"增強型的for循環get方法花的時間:"+(System.currentTimeMillis()-starTime));
System.out.println();
}
}
捕獲.PNG