码迷,mamicode.com
首页 > 其他好文 > 详细

集合使用问题笔记

时间:2017-09-08 01:28:11      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:pre   print   blog   ++   bsp   集合   move   color   tde   

1、遍历集合删除元素

 1 package collectionDemo.list;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class ListDemo {
 7 
 8     public static void main(String[] args) {
 9         List<String> sList = new ArrayList<String>();
10         sList.add("0");
11         sList.add("1");
12         sList.add("2");
13         sList.add("3");
14         sList.add("4");
15         System.out.println(sList);
16         // 对list进行遍历,并按条件进行删除
17         for (int i = 0; i < sList.size(); i++) {
18             if (i == 1 || i == 2) {
19                 sList.remove(i);
20             }
21         }
22         System.out.println(sList);
23 
24     }
25 
26 }

输出结果为:

[0, 1, 2, 3, 4]
[0, 2, 4]

  乍一看代码,像是实现删除索引为1和2的元素。但执行结果却并非如此。在执行遍历集合删除元素时,当i==1时,集合remove掉索引为1(i)的元素,移除字符串1,此处是正常逻辑。但执行到i==2时,remove的却是字符串3。原因如下:

  使用普通for循环遍历ArrayList时,是以索引为依据进行遍历的。在遍历过程中remove元素会导致索引的混乱。比如上例中,当remove(1)后,集合size将发生变化,元素将变少,字符串2所对应的索引将由2变为1,后边的字符串3和4依次类推索引变为2和3,执行下一次循环时,i++为2,此时remove的是字符串3,所以导致了上述结果。

 

集合使用问题笔记

标签:pre   print   blog   ++   bsp   集合   move   color   tde   

原文地址:http://www.cnblogs.com/silenceshining/p/7492490.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!