zoukankan      html  css  js  c++  java
  • 面试题:测试给定的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删除报错。

  • 相关阅读:
    linux ftp启用和停用及vsftpd安装 ssh 启用和停用命令及ssh的安装
    linux 网络命令
    printf的使用
    Shell echo命令
    shell脚本之文件操作
    shell脚本之字符串运算的使用
    linux的计划任务操作
    系统操作有关的命令
    shell脚本之 operater.sh 算术运算符;比较运算符;布尔运算符;逻辑与或非运算符;字符串运算符的使用
    shell脚本的参数传递使用
  • 原文地址:https://www.cnblogs.com/feiyujun/p/10117018.html
Copyright © 2011-2022 走看看