首頁 >Java >java教程 >java中for迴圈刪除集合陷阱

java中for迴圈刪除集合陷阱

高洛峰
高洛峰原創
2017-01-16 15:46:411620瀏覽

首先看下面的程式碼:

import java.util.LinkedList;
import java.util.List;
 
public class DeleteCollection {
   
  public static void main(String[] args) {
    List<String> list = new LinkedList<String>();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");
    list.add("e");
    for(int i=0;i<list.size();i++){ //循环删除集合中的元素
      list.remove(i);
    }
    System.out.println("还剩余的元素个数:"+list.size());
  }
}

上述的程式碼按照思路應該是對的,輸出的結果也應該是0

看下面實際輸出的結果:

還剩餘的元素個數:2

你也許會問為什麼呢?因為集合的大小是動態變化的,當你刪除一個元素之後,元素中的序號又重新排列,原來第二個應該刪除的元素現在排在了第一個元素的位置,真正刪除的卻是第三個元素,依次類推,刪除的是第一個、第三個、第五個、、、、如果在原來刪除的程式碼中加入語句:System.out.println("即將刪除的元素:"+list. get(i));即可驗證。

加入上述語句後輸出的結果:


即將刪除的元素:a
即將刪除的元素:c
即將刪除的元素:e

還剩餘的元素個數:2

,原因是因為你要刪除的元素往前面移動了,而你的i保存的值依舊往後走,所以如果讓i不往後走,往前走一個,即可刪除本來排在第二個位置的元素現在排在了第一個位置的元素。

更改後的核心程式碼:

for(int i=0;i<list.size();i++){
    System.out.println("即将删除的元素:"+list.get(i));
    list.remove(i);
    i--;
  }

結果:

即將刪除的元素:a

即將刪除的元素:b
即將刪除的元素:c
即將刪除的元素:d
即將刪除的元素: e
還剩餘的元素個數:0

以上所述就是本文的全部內容了,希望大家能夠喜歡。

更多java中for循環刪除集合陷阱相關文章請關注PHP中文網!

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