zoukankan      html  css  js  c++  java
  • 循环删除list中的某一元素的三种方式

    方式一:

    /**
      * 直接使用foreach方法移除list中的元素会抛异常
      * Exception in thread "main" java.util.ConcurrentModificationException
      * 这种方式的问题在于,删除某个元素后,list的大小发生了变化,而你的索引也在变化,
      * 所以会导致你在遍历的时候漏掉某些元素。
      * 比如当你删除第1个元素后,继续根据索引访问第2个元素时,因为删除的关系后面的元素都往前移动了一位,
      * 所以实际访问的是第3个元素。
      * 因此,这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用。
      */
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        for (String str : list) {
            if ("aa".equals(str)) {
                list.remove(str);
            }
        }
        System.out.println(list.size());
    }

    方式二:

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String str = (String)it.next();
            if("aa".equals(str)){
                it.remove();
            }
        }
        System.out.println(list.size());
    }

    方式三:

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("aa");
        list.add("bb");
        list.add("cc");
        for (int i = list.size() - 1; i >= 0; i--) {
            String str = list.get(i);
            if ("cc".equals(str)) {
                list.remove(str);
            }
        }
        System.out.println(list.size());
    }
  • 相关阅读:
    畅通工程续
    find the safest road
    Window Pains
    什么是DO / DTO / BO / VO /AO ?
    编程四大件
    1.Redis简介和安装
    0.Redis课程大纲
    8.docker容器虚拟化与传统虚拟机比较
    7.docker私有仓库
    6.Docker服务编排
  • 原文地址:https://www.cnblogs.com/JimmyThomas/p/12105266.html
Copyright © 2011-2022 走看看