国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
java for foreach while循環(huán)的比較 - nick970 - JavaE...

java for foreach while循環(huán)的比較

關(guān)鍵字: java
在java中究竟是一般的for循環(huán),還是for的增強型foreach,或是while的執(zhí)行效率比較快呢,我用了一個簡單的程序來分析3種循環(huán)
public static void main(String[] args) {

List<Integer> map = new ArrayList<Integer>();
for (int i = 0; i < 100000; i++) {
map.add(i);
}


long currTime = System.currentTimeMillis();

//基本的for
int z = map.size();
// for (int i = 0; i < z; i++) {
// int tmp = map.get(i);
// System.out.println(tmp);
// }
//foreach
// for (Integer integer : map) {
// int tmp = integer;
// System.out.println(tmp);
// }
//while
// int i = 0 ;
// while(i<z){
// int tmp = map.get(i);
// System.out.println(tmp);
// i++;
// }
//
// long time = System.currentTimeMillis() - currTime ;
// System.out.println(time);
//
// }
下面是3種循環(huán)得出的數(shù)據(jù)(時間單位為毫秒)
      for                   foreach                    while      
第一組比較(4次)
      1313                  1329                       1219
      1266                  1063                       1156
      1078                  1109                       1125
      1297                  1047                       1266
總時間
      4954                  4548                       4766
第二組比較
      1219                  1125                       1109
      1172                  1062                       1188
      1313                  1109                       1125
      1125                  1296                       1125
總時間
      4829                  4592                       4547
第三組比較
      1265                  1078                       1125
      1062                  1062                       1094
      1328                  1109                       1094
      1329                  1235                       1125
總時間
      4984                  4484                       4438
從上面的數(shù)據(jù)我們可以看出foreach和while的效率幾乎是差不多的,而for則相對較慢一些。

這是不是代表著foreach可以替代掉for呢,顯然不是foreach的內(nèi)部原理其實還是 Iterator
但它不能像Iterator一樣可以人為的控制,而且也不能調(diào)用iterator.remove();更不能使用下標來方便的訪問元素.
foreach這種循環(huán)一般只適合做數(shù)組的遍歷,提取數(shù)據(jù)顯示等,不適合用于增加刪除和使用下標等復(fù)雜的操作.
用一個最簡單的程序來說明用foreach來進行賦值操作造成的錯誤.
public class test {
  public static void main(String[] args) 
     { 
     User[] users = new User[2]; 
     users[0] = new User();
     users[1] = new User();

//          for(int i=0; i<users.length; i++) 
//          { 
//              users[i] = new User(); 
//          } 

       for(User user:users) 
       { 
       user = new User(); 
       } 
         
         System.out.println(users[0].name); 
     } 

}

class User 

     String name = "nick";    

第一種for循環(huán)可以正常的賦值,而第二種foreach就會報出空指針.

for循環(huán)和while循環(huán)在使用上有一定的差異,但從實現(xiàn)的效果來看都是基本一樣的。
for循環(huán)再某些方面要更優(yōu)一些如無限循環(huán) while(true) for(;;)
  編譯前              編譯后
  while (1);        mov eax,1
                                              test eax,eax
                                              je foo+23h
                                              jmp foo+18h

    編譯前              編譯后
    for (;;);          jmp foo+23h   
    從編譯后的結(jié)果我們可以看出for的指令少,而且沒有判斷,顯然更快.

  到底最好最差呢,其實都是相對的,根據(jù)不同的情況找到最優(yōu)的解決才是最好的.
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Java8 Lambda表達式教程
java8 新特性 Stream流 分組 排序 過濾 多條件去重
設(shè)計模式之不變模式(Immutable Pattern)分析
一個容易造成死循環(huán)的bug
C/C 程序編譯步驟詳解
ECSHOP中的會員中心2條修改方法
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服