小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Java集合類ArrayList循環(huán)中刪除特定元素

 Erica_Shea 2014-10-09
在項目開發(fā)中,我們可能往往需要動態(tài)的刪除ArrayList中的一些元素。
for(int i = 0 , len= list.size();i<len;++i){
  if(list.get(i)==XXX){
       list.remove(i);
  }
}
上面這種方式會拋出如下異常:
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)

因為你刪除了元素,但是未改變迭代的下標(biāo),這樣當(dāng)?shù)阶詈笠粋€的時候就會拋異常咯。

可以對上面的程序進(jìn)行如下改進(jìn):
for(int i = 0 , len= list.size();i<len;++i){
  if(list.get(i)==XXX){
       list.remove(i);
       --len;//減少一個
       --i;//多謝deny_guoshou指正,如果不加會出現(xiàn)評論1樓所說的情況。
 }
}

上面的代碼就正確了。

下面我們再介紹一種方案:

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

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

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

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

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

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


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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多