首頁  >  文章  >  Java  >  java中List刪除時所需的注意事項

java中List刪除時所需的注意事項

高洛峰
高洛峰原創
2017-01-22 16:15:571170瀏覽

java中的LIST在刪除時,通常會用list.remove(o); 但這樣往往會出現問題,先來看下面的這段程式碼:

package com.demo;
  
import java.util.ArrayList;
import java.util.List;
  
public class Test11 {
    
  public void delete(){
    List<Integer> list = new ArrayList<Integer>();
    list.add(1);
    list.add(2);
    list.add(2);
    list.add(3);
    for (int i = 0; i < list.size(); i++) {
      if(list.get(i)==2){
        list.remove(i);
      }
    }
    this.outputList(list);
  }
    
  private void outputList(List<Integer> list){
    for (Integer i : list) {
      System.out.println(i);
    }
  }
  
  public static void main(String[] args) {
    Test11 t = new Test11();
    t.delete();
      
  }
  
}

   

這結果顯然不是我們的預期,我們是希望刪除List中所有為2的元素,但輸出結果中卻出現了2,這是因為在i等於1時,刪除了List中的index為1的元素2 ,這時候list為[1,2,3], 但接下來,i遞增後,等於2,在list.get(i)時,取出來的結果就成為了3了,也就是說隨著list元素的刪除,index是隨之變化的,這就是其中的陷阱,於是,我們得尋找一個在刪除時,索引不發生變化的迭代方式來刪除,而iterator是被創建之後會建立一個指向原來對象的單鏈索引表,當原來的物件數量改變時,這個索引表的內容不會同步改變,也就是用cursor來維護這個索引表,於是,可以這樣來刪除:

1
 
2
 
3

   

 這個程式碼結果就是正確的了!

可能有人會說,我是在iterator中刪除的,為什麼list的值會改變?這個問題,自已思考去吧!思考不出來,可以轉行了!

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或工作能帶來一定的幫助,如果有疑問大家可以留言交流。

更多java中List刪除時需要的注意事項相關文章請關注PHP中文網!

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