集合使用问题笔记
Posted 一首简单的歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合使用问题笔记相关的知识,希望对你有一定的参考价值。
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,所以导致了上述结果。
以上是关于集合使用问题笔记的主要内容,如果未能解决你的问题,请参考以下文章