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

Posted feiyujun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试题:测试给定的list,使用for,foreach,iterator删除元素的不同表现相关的知识,希望对你有一定的参考价值。

上代码:

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删除元素的不同表现的主要内容,如果未能解决你的问题,请参考以下文章

经典面试题-大厂SQL题目

JavaScript面试题:重复输出一个给定的字符串

python面试题之生成器迭代器

2022Java面试题大全,附答案,最新整理

如何快速从 List 中查找一条数据

面试题