• java 在循环中删除数组元素


      在写代码中经常会遇到需要在数组循环中删除数组元素的情况,但删除会导致数组长度变化。

    package com.fortunedr.thirdReport;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            List<String> list=new ArrayList<String>(); 
            list.add("a");
            list.add("bb");
            list.add("a1");
            list.add("a22");
            //去除数组中"a"的元素
            for(String st:list){
                System.out.println(st);
                if(st.equals("a")){
                    
                    list.remove(st);
                }
            }
            
        }
    
    }

    运行结果是:

    a
    Exception in thread "main" java.util.ConcurrentModificationException
        at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
        at java.util.ArrayList$Itr.next(ArrayList.java:851)
        at com.fortunedr.thirdReport.Test.main(Test.java:16)

    这是运行异常

    解决方法是,将数组转换为Iterator<> 并且应用Iterator的删除方法,Iterator.remove

    package com.fortunedr.thirdReport;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class Test {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            List<String> list=new ArrayList<String>(); 
            list.add("a");
            list.add("bb");
            list.add("a1");
            list.add("a22");
            Iterator<String> it=list.iterator();
            //去除数组中"a"的元素
            while(it.hasNext()){
                String st=it.next();
                if(st.equals("a")){
                    it.remove();
                }
            }
            for(String str:list){
                System.out.println(str);
            }
            
            
        }
    
    }

    运行结果是:

    bb
    a1
    a22

    总结:在循环中删除数组,会导致数组长度变化,这样导致出现异常java.util.ConcurrentModificationException或者数组越界的异常。

      解决方式是将数组转化为Iterator,然后利用it.remove();删除数组中的元素

    学习的时间不一定要特定安排
  • 相关阅读:
    /bin,/sbin,/usr/sbin,/usr/bin 目录
    centos开放端口8080
    centos 创建用户组及用户
    oracle内存优化
    ORACLE概要文件
    【刷题】洛谷 P3834 【模板】可持久化线段树 1(主席树)
    【总结】莫比乌斯反演
    【刷题】洛谷 P3768 简单的数学题
    【刷题】BZOJ 4816 [Sdoi2017]数字表格
    【刷题】BZOJ 2693 jzptab
  • 原文地址:https://www.cnblogs.com/zhongzheng123/p/5820755.html
Copyright © 2020-2023  润新知