国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

java中for循環刪除集合陷阱

2019-11-26 15:12:09
字體:
來源:轉載
供稿:網友

首先看下面的代碼:

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 上杭县| 兰西县| 类乌齐县| 澜沧| 辽宁省| 内黄县| 彭山县| 鲁甸县| 长宁区| 聂荣县| 富平县| 孟村| 新龙县| 巩留县| 慈溪市| 宿州市| 金溪县| 山东省| 孟州市| 广元市| 盐源县| 廊坊市| 夏河县| 浮梁县| 达拉特旗| 客服| 余干县| 宝丰县| 余江县| 湖南省| 宁武县| 资源县| 南昌县| 九江县| 新河县| 蒲江县| 新平| 留坝县| 昭苏县| 定日县| 鲜城|