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

  • 相关阅读:
    Vue大文件上传 vuesimpleloader分片上传到AWS S3
    如何把设备安全的接入AWS IoT(一)
    Vue大文件分片上传 直连AWS S3
    JAVA AWS 根据Dynamodb增删改查数据
    JAVA实现和AWS IOT订阅、发布MQTT消息
    AWS 使用总结及部分服务学习记录
    Vue 刷新组件
    Vue文件上传 自定义样式 Button按钮代替Input 并通过java上传(非分片)到AWS S3
    sql 去年,月
    json2【转】
  • 原文地址:https://www.cnblogs.com/feiyujun/p/10117018.html
Copyright © 2011-2022 走看看