JAVA中循环遍历list有三种方式:
- 1.for循环、
- 2.增强for循环(也就是常说的foreach循环)。
- 3.iterator遍历。
第一种:for循环遍历删除元素:
public class Test {
public static void main(String[] args) {
List<String> lists=new ArrayList();
lists.add("111111111");
lists.add("222222222");
lists.add("333333333");
lists.add("4444444444");
lists.add("555555555555");
lists.add("6666666666");
lists.add("7777777777");
lists.add("88888888888");
lists.add("9999999999");
// 1、for循环遍历list
for (int i = 0; i < lists.size(); i++) {
System.out.println(lists.remove(i));
}
}
}
嗯,看上去似乎没啥毛病,请看打印结果:
yhx.png
分析:从结果看,相邻之间删除数据,代码明明是依次循环删除数据。怎么会相邻删除数据呢?
原因:
这种方式的问题在于,删除某个元素后,list的大小发生了变化,而你的索引也在变化,所以会导致你在遍历的时候漏掉某些元素。比如当你删除第1个元素后,继续根据索引访问第2个元素时,因为删除的关系后面的元素都往前移动了一位,所以实际访问的是第3个元素。因此,这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用。(也就是索引移位引起的原因)
第二种:增强for循环
public class Test {
public static void main(String[] args) {
List<String> lists = new ArrayList();
lists.add("111111111");
lists.add("222222222");
lists.add("333333333");
lists.add("4444444444");
lists.add("555555555555");
lists.add("6666666666");
lists.add("7777777777");
lists.add("88888888888");
lists.add("9999999999");
// 2、增强for循环
for (String x : lists) {
System.out.println(lists.remove(x));
}
}
}
嗯,看似也好像没啥毛病,看结果:
yhx.png
分析:这个时候《有道》你值得拥有。每个程序员必备,
就像每个成功男人的背后,都有一部爱情动作片....(好像跑偏了)
看看这句错误是啥意思:
Exception in thread "main" java.util.ConcurrentModificationException
Concurrent =====> 并发的;一致的;同时发生的
Modification=====> 修改,修正;改变
不要问我翻译这么6,我也是有道过来的。
赶脚这样的翻译没啥毛病,哈哈哈,原因不就出来了么
原因:
删除元素后循环会继续报错误信息ConcurrentModificationException,因为元素在使用的时候发生了并发的修改,导致异常抛出。
3.第三种:iterator遍历
public class Test {
public static void main(String[] args) {
List<String> lists = new ArrayList();
lists.add("111111111");
lists.add("222222222");
lists.add("333333333");
lists.add("4444444444");
lists.add("555555555555");
lists.add("6666666666");
lists.add("7777777777");
lists.add("88888888888");
lists.add("9999999999");
// 3、iterator遍历
Iterator<String> it = lists.iterator();
while(it.hasNext()){
String x = it.next();
it.remove();
System.out.println(x);
}
}
}
嗯,这个看上去也没毛病,这次蒙对了,真还没毛病:
yhx.png综上所述:
网友评论