1. 程式人生 > >面試題:測試給定的list,使用for,foreach,iterator刪除元素的不同表現

面試題:測試給定的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刪除報錯。