在項目開發中,我們可能往往需要動態的刪除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循環中刪除特定元素的方法全部內容了,希望大家多多支持武林網~
新聞熱點
疑難解答