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中文網!