首頁  >  文章  >  Java  >  java集合類別arraylist循環中刪除特定元素的方法

java集合類別arraylist循環中刪除特定元素的方法

高洛峰
高洛峰原創
2017-01-22 16:12:061677瀏覽

在專案開發中,我們可能往往需要動態的刪除ArrayList中的一些元素。

一種錯誤的方式:

<pre name="code" class="java">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;//减少一个
 }
  
}

上面的程式碼就正確了。

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

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介面實現的,所以建議使用第二種方案。

以上就是小編為大家帶來的java集合類arraylist循環中刪除特定元素的方法全部內容了,希望大家多多支持PHP中文網~

更多java集合類arraylist循環中刪除特定元素的方法相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn