遍歷list集合刪除指定元素方法

遍歷list集合刪除指定元素方法

今天的在項目中犯的一個錯誤記錄一下:

剛開始粗心寫成for喜歡遍歷 這樣會出現下表越界的問題

應該是iterate遍歷移除集合中的元素



以下是轉載:


一種錯誤的方式:

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)

因爲你刪除了元素,但是未改變迭代的下標,這樣當迭代到最後一個的時候就會拋異常

可以對上面的程序進行如下改進:

for(int i = 0 , len= list.size();i<len;++i){  
  if(list.get(i)==XXX){  
       list.remove(i);  
       --len;//減少一個  
       --i;  
 }  
}

上面的代碼就正確了。

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

List接口內部實現了Iterator接口,提供開發者一個iterator()得到當前list對象的一個iterator對象。

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

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

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

查看ArrayList源碼會發現很多方法內部都是基於iterator接口實現的,所以推薦使用第二種方案






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章