首页 > 其他 > 详细

面试题:测试给定的list,使用for,foreach,iterator删除元素的不同表现

时间:2018-12-13 23:17:13      阅读:225      评论:0      收藏:0      [点我收藏+]

上代码:

1. 使用增强for循环(foreach)

 1 package com.xxx;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 /**
 7  * 测试给定的list,使用for,foreach,iterator删除的不同表现
 8  */
 9 public class TestForOfList {
10     public static void main(String[] args) {
11         List<Integer> list = new ArrayList<>();
12         for (int i = 0; i < 10; i++) {
13             list.add(i);
14         }
15 
16         //单独使用会报错,java.util.ConcurrentModificationException
17         for (Integer val : list) {
18             list.remove(val);
19         }
20     }
21 }

 

报以下错误:

Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
	at java.util.ArrayList$Itr.next(ArrayList.java:859)
	at com.company.TestForOfList.main(TestForOfList.java:25)

2. 使用for循环

 1 package com.xxx;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 /**
 7  * 测试给定的list,使用for,foreach,iterator删除的不同表现
 8  */
 9 public class TestForOfList {
10     public static void main(String[] args) {
11         List<Integer> list = new ArrayList<>();
12         for (int i = 0; i < 10; i++) {
13             list.add(i);
14         }
15 
16         for (int i = 0; i < list.size(); i++) {
17             System.out.println(list.remove(i));
18         }
19 
20     }
21 }

 

结果是:

0
2
4
6
8

可见时可以删除的,只是删除的都是索引时偶数的。因为索引时动态调整的。

3. 使用iterator

 1 package com.xxx;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 import java.util.List;
 6 
 7 /**
 8  * 测试给定的list,使用for,foreach,iterator删除的不同表现
 9  */
10 public class TestForOfList {
11     public static void main(String[] args) {
12         List<Integer> list = new ArrayList<>();
13         for (int i = 0; i < 10; i++) {
14             list.add(i);
15         }
16 
17         Iterator<Integer> iter = list.iterator();
18         while (iter.hasNext()) {
19             iter.next();
20             iter.remove();
21         }
22         System.out.println(list.size());
23 
24     }
25 }

结果是:

0

表面全部都删除了。

总结以下,使用iterator能把list的元素区别删除了;for只能删除索引时偶数的元素;foreach删除报错。

面试题:测试给定的list,使用for,foreach,iterator删除元素的不同表现

原文:https://www.cnblogs.com/feiyujun/p/10117018.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!