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删除报错。

  • 相关阅读:
    FineBI客户画像分析与客户价值模型快速入门
    大数据分析免费学习教程
    Xshell连接不上Ubuntu解决方式
    Jenkins时区设置为北京时间
    ASP.NET Core 与支付宝开发文档
    .NET Core 从 Github到 Nuget 持续集成、部署
    使用 dotnet cli 命令上传 nuget 程序包
    发布你的程序包到Nuget
    ASP.NET Core 判断请求是否为Ajax请求
    ASP.NET Core 如何在运行Docker容器时指定容器外部端口(docker compose)
  • 原文地址:https://www.cnblogs.com/feiyujun/p/10117018.html
Copyright © 2011-2022 走看看