JAVA List刪除時需注意的地方

來源:互聯網
上載者:User

標籤:

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();}}

 返回結果是:

1

2

3

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

 

package com.demo;import java.util.ArrayList;import java.util.Iterator;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);this.iteratorDelete(list.iterator(), 2);this.outputList(list);}private void iteratorDelete(Iterator<Integer> it, int deleteObject){while(it.hasNext()){int i = it.next();if(i==deleteObject){it.remove();}}}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();}}

 

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

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

 

JAVA List刪除時需注意的地方

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.