Effective Java之for-each循环优先于for循环(四十六)
生活随笔
收集整理的這篇文章主要介紹了
Effective Java之for-each循环优先于for循环(四十六)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
for循環的缺點:
對于for循環遍歷,我們很容易出現這樣的一些低級錯誤:
對于數組
for(int i = 0 ; i >100 ; i++) for(int i = 100 ; i >=0 ; i++)我們有時候會寫出像這樣一時短路寫出來的代碼~原因很簡單,i出現了三次,每個i我們都要小心!
但是for-each循環就不同了,全程都沒有出現 i 好吧,何來錯誤?
對于集合
enum Face { ONE, TWO, THREE, FOUR, FIVE, SIX }Collection< Face > faces = Arrays.asList(Face.values());for(Iterator< Face > i = faces.iterator(); i.hasNext();) {for(Iterator< Face > j = faces.iterator(); j.hasNext();){ System.out.println(i.next() + " " + j.next());}}看,i是外層循環,但是在內循環中不斷i.next(),導致了錯誤。這也是疏忽導致的,我們需要在外層循環中記錄下i.next()
像這樣
enum Face { ONE, TWO, THREE, FOUR, FIVE, SIX }Collection<Face> faces = Arrays.asList(Face.values());for(Iterator<Face> i = faces.iterator(); i.hasNext();){Face face = i.next();for(Iterator<Face> j = faces.iterator(); j.hasNext();) {System.out.println(face + " " + j.next());}}來看for-each循環:
for(Face face1 : faces)for(Face face2 : faces)System.out.println(face1 + " " + face2);實在是太優雅了!!
但是在for-each循環有兩個小缺點,相信大家在編程的時候也類詞的情況:
- for-each得不到索引,這是個很尷尬的問題,導致所有需要索引的操作的行不通。比如書中提到的轉換,平行迭代。
- for-each無法刪除集合中的元素。原因很簡單,迭代器是刪除元素的御用神器啊啊啊
總結:能用for-each就用它,又容易寫有整潔,除非要刪除元素或者用到索引才用普通for。
總結
以上是生活随笔為你收集整理的Effective Java之for-each循环优先于for循环(四十六)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Effective Java之将局部变量
- 下一篇: Effective Java之通过接口引