程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java集合類ArrayList循環中刪除特定元素

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

編輯:關於JAVA

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

一種錯誤的方式:

  1. <pre name="code" class="Java">for(int i = 0 , len= list.size();i<len;++i){
  2. if(list.get(i)==XXX){
  3. list.remove(i);
  4. }
  5. }

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

  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)

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

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

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

上面的代碼就正確了。

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

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

  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接口實現的,所以推薦使用第二種方案。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved