久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

JAVA中循環(huán)刪除list中元素的方法總結(jié)

 日月桃子 2018-05-29

  印象中循環(huán)刪除list中的元素使用for循環(huán)的方式是有問題的,,但是可以使用增強(qiáng)的for循環(huán),,然后今天在使用時(shí)發(fā)現(xiàn)報(bào)錯(cuò)了,然后去科普了一下,,再然后發(fā)現(xiàn)這是一個(gè)誤區(qū),。下面就來講一講。,。伸手黨可直接跳至文末,??纯偨Y(jié),。。

  JAVA中循環(huán)遍歷list有三種方式for循環(huán),、增強(qiáng)for循環(huán)(也就是常說的foreach循環(huán)),、iterator遍歷。

 

1,、for循環(huán)遍歷list

for(int i=0;i<list.size();i++){
    if(list.get(i).equals("del"))
        list.remove(i);
}

   這種方式的問題在于,,刪除某個(gè)元素后,list的大小發(fā)生了變化,,而你的索引也在變化,,所以會導(dǎo)致你在遍歷的時(shí)候漏掉某些元素。比如當(dāng)你刪除第1個(gè)元素后,,繼續(xù)根據(jù)索引訪問第2個(gè)元素時(shí),,因?yàn)閯h除的關(guān)系后面的元素都往前移動(dòng)了一位,所以實(shí)際訪問的是第3個(gè)元素,。因此,,這種方式可以用在刪除特定的一個(gè)元素時(shí)使用,但不適合循環(huán)刪除多個(gè)元素時(shí)使用,。

 

2,、增強(qiáng)for循環(huán)

for(String x:list){
    if(x.equals("del"))
        list.remove(x);
}

   這種方式的問題在于,刪除元素后繼續(xù)循環(huán)會報(bào)錯(cuò)誤信息ConcurrentModificationException,,因?yàn)樵卦谑褂玫臅r(shí)候發(fā)生了并發(fā)的修改,,導(dǎo)致異常拋出,。但是刪除完畢馬上使用break跳出,則不會觸發(fā)報(bào)錯(cuò),。

 

3,、iterator遍歷

Iterator<String> it = list.iterator();
while(it.hasNext()){
    String x = it.next();
    if(x.equals("del")){
        it.remove();
    }
}

  這種方式可以正常的循環(huán)及刪除。但要注意的是,,使用iterator的remove方法,,如果用list的remove方法同樣會報(bào)上面提到的ConcurrentModificationException錯(cuò)誤。

   總結(jié):

 ?。?)循環(huán)刪除list中特定一個(gè)元素的,,可以使用三種方式中的任意一種,但在使用中要注意上面分析的各個(gè)問題,。

 ?。?)循環(huán)刪除list中多個(gè)元素的,應(yīng)該使用迭代器iterator方式,。

原文鏈接:https://www.cnblogs.com/pcheng/p/5336903.html

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多