for循環與foreach的性能比較


JDK1.5開始新增了foreach循環,在語法上比for循環簡潔;

但foreach並不是for循環的語法糖,而可以說是iterator的語法糖;

 

普通for循環:

for(int i=0;i<100;i++)
{
    a = i;
}    

 

foreach循環:

 

for(int i : integers)
{
   a = i;
}

 

實質上等同於:

for(Iterator<Integer> i=list.iterator();i.hasNext();)
{
     a = i.next();  
}

  

 

區別:

一個按順序遍歷,一個使用iterator迭代器遍歷;

 

從數據結構來說,畫重點:

for循環是隨機訪問元素,foreach是順序鏈表訪問元素;

 

性能上:

對於arraylist,是順序表,使用for循環可以順序訪問,速度較快;使用foreach會比for循環稍慢一些。

對於linkedlist,是單鏈表,使用for循環每次都要從第一個元素讀取next域來讀取,速度非常慢;使用foreach可以直接讀取當前結點,數據較快;

 

舉個栗子:

順序表 a[3]

  用for循環,從a[0]開始直接讀到元素,接着直接讀a[1];(順序表的優點,隨機訪問)

  用foreach,  得到a[0]-a[2]的全部地址放入隊列,按順序取出隊里里的地址來訪問元素;

 

單鏈表 b[3]

  用for循環,從a[0]開始讀元素、然后通過a[0]的next讀到a[1]元素、通過a[0]的next的next讀到a[2]元素,以此類推,性能影響較大,慎用!

  用foreach, 得到a[0]-a[2]的全部地址放入隊列,按順序取出隊里里的地址來訪問元素;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM