Effective Java之for-each循环优先于for循环(四十六)
生活随笔
收集整理的這篇文章主要介紹了
Effective Java之for-each循环优先于for循环(四十六)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
for循環(huán)的缺點(diǎn):
對(duì)于for循環(huán)遍歷,我們很容易出現(xiàn)這樣的一些低級(jí)錯(cuò)誤:
對(duì)于數(shù)組
for(int i = 0 ; i >100 ; i++) for(int i = 100 ; i >=0 ; i++)我們有時(shí)候會(huì)寫(xiě)出像這樣一時(shí)短路寫(xiě)出來(lái)的代碼~原因很簡(jiǎn)單,i出現(xiàn)了三次,每個(gè)i我們都要小心!
但是for-each循環(huán)就不同了,全程都沒(méi)有出現(xiàn) i 好吧,何來(lái)錯(cuò)誤?
對(duì)于集合
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是外層循環(huán),但是在內(nèi)循環(huán)中不斷i.next(),導(dǎo)致了錯(cuò)誤。這也是疏忽導(dǎo)致的,我們需要在外層循環(huán)中記錄下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());}}來(lái)看for-each循環(huán):
for(Face face1 : faces)for(Face face2 : faces)System.out.println(face1 + " " + face2);實(shí)在是太優(yōu)雅了!!
但是在for-each循環(huán)有兩個(gè)小缺點(diǎn),相信大家在編程的時(shí)候也類(lèi)詞的情況:
- for-each得不到索引,這是個(gè)很尷尬的問(wèn)題,導(dǎo)致所有需要索引的操作的行不通。比如書(shū)中提到的轉(zhuǎn)換,平行迭代。
- for-each無(wú)法刪除集合中的元素。原因很簡(jiǎn)單,迭代器是刪除元素的御用神器啊啊啊
總結(jié):能用for-each就用它,又容易寫(xiě)有整潔,除非要?jiǎng)h除元素或者用到索引才用普通for。
總結(jié)
以上是生活随笔為你收集整理的Effective Java之for-each循环优先于for循环(四十六)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Effective Java之将局部变量
- 下一篇: Effective Java之通过接口引