Java兩種for循環的比較


最近在思考一個問題,公司里很多人寫代碼,都是用增強型的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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容