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