91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中for循環和foreach循環的性能有什么不同

發布時間:2021-09-27 10:48:43 來源:億速云 閱讀:154 作者:小新 欄目:開發技術

小編給大家分享一下Java中for循環和foreach循環的性能有什么不同,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

for循環和foreach循環的性能對比

在公司codereview過程中,發現一個問題,就是有些人循環用的是普通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循環,這種做法很糟糕,數據量大的時候有可能會導致系統崩潰。

for與foreach循環效率比較

對于數組來說

for循環略慢foreach

對于鏈表來說

for循環比foreach慢很多。因為for循環每次獲取鏈表節點都要重頭開始查找,而foreach是采用迭代方式,查找節點只需遍歷一次,節省了很多時間。

看完了這篇文章,相信你對“Java中for循環和foreach循環的性能有什么不同”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥中县| 龙门县| 张家川| 新丰县| 务川| 丹寨县| 平昌县| 资溪县| 乐平市| 佛学| 左贡县| 嘉禾县| 鸡西市| 江安县| 茌平县| 长寿区| 同仁县| 航空| 上犹县| 娄烦县| 塔城市| 乌审旗| 曲沃县| 鄂托克前旗| 奉贤区| 金坛市| 吉水县| 井研县| 麻江县| 滕州市| 黑水县| 宣恩县| 芜湖市| 容城县| 那曲县| 贵溪市| 无极县| 阿坝县| 四平市| 自治县| 微山县|