zoukankan      html  css  js  c++  java
  • 三种迭代能否删除

    package com.day15.For;

    import java.util.ArrayList;
    import java.util.Iterator;

    /*普通for循环,可以删除,但是索引要--

    迭代器,可以删除,但是必须使用迭代器自身的remove方法,而不是集合的remove方法,否则会出现并发修改异常

    增强for循环不能删除,因为增强for循环底层依赖的是迭代器,但是调用删除方法时,必须使用list.remove(),则相当于调用的是集合的删除方法,引起并发修改异常

    public class ThreeDelete {

    public static void main(String[] args) {
      ArrayList<String> list=new ArrayList<>();
      list.add("a");
      list.add("b");
      list.add("b");
      list.add("c");
      list.add("d");
      //普通for循环删除,索引要--
      /* for(int i=0;i<list.size();i++) {
        if("b".equals(list.get(i))) {
          list.remove(i--);
        }
       }
      System.out.println(list);//[a, c, d]
      */

    /*
      Iterator<String> it =list.iterator();
        while(it.hasNext()) {
          if("b".equals(it.next())) {
          //list.remove("b");//不能用集合的删除方法,因为迭代过程中如果集合修改会出现并发修改异常
          it.remove();
        }
      }
      System.out.println(list);//[a, c, d]
    */
    /*  for(Iterator<String> it1=list.iterator();it1.hasNext();) {
        if("b".equals(it1.next())) {
        it1.remove();
        }
      }
      System.out.println(list);//[a, c, d]
    */
        for(String str:list) {
          if("b".equals(str)) {
          list.remove("b");//并发修改异常,因为增强for循环底层依赖的是迭代器
        }
      }
    }

    }

  • 相关阅读:
    聊聊ES6中的generator
    generator-yield到底是个啥
    jquery 常用方法中那些我不知道的事
    jquery 获取textarea文本值详解
    数组去重
    五指棋人机大战之ai篇
    五指棋人机大战之ui篇
    css控制背景图像不随滚动条的滚动而滚动
    用canvas画会旋转的伞
    CSS3 实现太极图案
  • 原文地址:https://www.cnblogs.com/zhujialei123/p/9025873.html
Copyright © 2011-2022 走看看