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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Effective Java之for-each循环优先于for循环(四十六)

發(fā)布時(shí)間:2024/2/28 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。