Java集合類ArrayList循環中刪除特定元素


在項目開發中,我們可能往往需要動態的刪除ArrayList中的一些元素。本文將講解Java集合類ArrayList循環中刪除特定的元素。

 

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

一種錯誤的方式:

[java]   view plain copy
  1. for(int i = 0 , len= list.size();i<len;++i){  
  2.   if(list.get(i)==XXX){  
  3.        list.remove(i);  
  4.   }  
  5. }  


上面這種方式會拋出如下異常:

[java]   view plain copy
  1. Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3  
  2.     at java.util.ArrayList.RangeCheck(Unknown Source)  
  3.     at java.util.ArrayList.get(Unknown Source)  
  4.     at ListDemo.main(ListDemo.java:20)  


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

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


上面的代碼就正確了。

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

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

[java]   view plain copy
  1. Iterator<String> sListIterator = list.iterator();  
  2. while(sListIterator.hasNext()){  
  3.     String e = sListIterator.next();  
  4.     if(e.equals("3")){  
  5.     sListIterator.remove();  
  6.     }  
  7. }  

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

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

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

出至:http://loonhxl.sinaapp.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM