zoukankan      html  css  js  c++  java
  • 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();删除数组中的元素

    学习的时间不一定要特定安排
  • 相关阅读:
    loading加载动画
    js获取文本的行数
    获取浏览器结尾生成的参数,提交的时候对其做判断
    js获取当前浏览器地址栏的链接,然后在链接后面加参数
    a链接在新窗口打开
    js随机出现2个数字
    css进行中打点效果
    jqeury显示前几个,隐藏后几个,点击后隐藏前几个显示后几个
    jQuery 源码解析(七) jQuery对象和DOM对象的互相转换
    jQuery 源码解析(六) $.each和$.map的区别
  • 原文地址:https://www.cnblogs.com/zhongzheng123/p/5820755.html
Copyright © 2011-2022 走看看