日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

foreach 循环详解

發布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 foreach 循环详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
譯自:http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html
考慮如下代碼(方式一):迭代一個 collection 集合對象,然后刪除集合元素 void cancelAll(Collection<TimerTask> c) {for (Iterator<TimerTask> i = c.iterator(); i.hasNext(); )i.next().cancel(); }以上迭代方式很丑陋,你知道,為什么丑陋?你看迭代器i 出現了3次,增加了我們出錯幾率,而且代碼如此雜亂,我們看如下代碼(方式二foreach 結構),它摒棄了這種丑陋。 void cancelAll(Collection<TimerTask> c) {for (TimerTask t : c)t.cancel(); } 利用方式一迭代 collection 集合對象 通常犯的錯誤,荔枝代碼如下: List suits = ...; List ranks = ...; List sortedDeck = new ArrayList();// BROKEN - throws NoSuchElementException! for (Iterator i = suits.iterator(); i.hasNext(); )for (Iterator j = ranks.iterator(); j.hasNext(); )sortedDeck.add(new Card(i.next(), j.next())); 為什么報錯? 當 ranks 的size 大于 suits.size 的時候,第3行中的 i.next() 就會拋出 NoSuchElementException 異常。
修改后的代碼如下(利用臨時變量 保存Suit實例,但代碼還是那么雜亂無章): // Fixed, though a bit ugly for (Iterator i = suits.iterator(); i.hasNext(); ) {Suit suit = (Suit) i.next();for (Iterator j = ranks.iterator(); j.hasNext(); )sortedDeck.add(new Card(suit, j.next())); } 我們看foreach 結構如何實現 for (Suit suit : suits)for (Rank rank : ranks)sortedDeck.add(new Card(suit, rank)); 等等 foreach結構還可以應用到數組的遍歷 // Returns the sum of the elements of a int sum(int[] a) {int result = 0;for (int i : a)result += i;return result; } 最后:我們什么時候不能用 foreach結構 迭代集合元素呢? case1:程序需要訪問迭代器 然后移除當前元素的時候;因為foreach 結構隱藏了 迭代器,所以無法調用remove() 方法; case2:foreach 結構不適用于 過濾 同樣也不適用于 遍歷過程中替換元素的操作。 case3:最后,foreach結構 不適用于同時并行遍歷 多個 集合元素。
雖然 foreach結構有以上缺點,但是它的應用可以覆蓋掉大多數的情況需要。

總結

以上是生活随笔為你收集整理的foreach 循环详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。