免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Java集合類ArrayList循環(huán)中刪除特定元素
在項(xiàng)目開發(fā)中,我們可能往往需要?jiǎng)討B(tài)的刪除ArrayList中的一些元素。
for(int i = 0 , len= list.size();i<len;++i){
  if(list.get(i)==XXX){
       list.remove(i);
  }
}
上面這種方式會(huì)拋出如下異常:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
    at java.util.ArrayList.RangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at ListDemo.main(ListDemo.java:20)

因?yàn)槟銊h除了元素,但是未改變迭代的下標(biāo),這樣當(dāng)?shù)阶詈笠粋€(gè)的時(shí)候就會(huì)拋異???br>
可以對(duì)上面的程序進(jìn)行如下改進(jìn):
for(int i = 0 , len= list.size();i<len;++i){
  if(list.get(i)==XXX){
       list.remove(i);
       --len;//減少一個(gè)
       --i;//多謝deny_guoshou指正,如果不加會(huì)出現(xiàn)評(píng)論1樓所說的情況。
 }
}

上面的代碼就正確了。

下面我們?cè)俳榻B一種方案:

List接口內(nèi)部實(shí)現(xiàn)了Iterator接口,提供開發(fā)者一個(gè)iterator()得到當(dāng)前l(fā)ist對(duì)象的一個(gè)iterator對(duì)象。

Iterator<String> sListIterator = list.iterator();
    while(sListIterator.hasNext()){
        String e = sListIterator.next();
        if(e.equals("3")){
        sListIterator.remove();
        }
    }

上面這種也是正確的,并推薦使用第二種方案。

兩種方案實(shí)現(xiàn)原理都差多的,第二種只是jdk封裝了下。

查看ArrayList源碼會(huì)發(fā)現(xiàn)很多方法內(nèi)部都是基于iterator接口實(shí)現(xiàn)的,所以推薦使用第二種方案。

轉(zhuǎn)摘自:http://blog.csdn.net/lazy_p/article/details/7365324


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
50道Java集合經(jīng)典面試題(收藏版)
[J] 再次遭遇 Iterator 遍歷 ArrayList 元素時(shí)執(zhí)行刪除操作
Java程序員排行前10的錯(cuò)誤,你有沒有中?
Java迭代器
關(guān)于 Java Collections 的幾個(gè)常見問題
java的Iterator源碼淺析
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服