zoukankan      html  css  js  c++  java
  • Java集合--ArrayList遍历删除元素

    面试问题:ArrayList在遍历移除元素会出现什么情况?

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class TestList2 {
        
        public static void main(String[] args) {
            
            List<String> list = new ArrayList<String>();
            
            list.add("马");
            list.add("张");
            list.add("张");
            list.add("马");
            list.add("马");
            
    //        int size = list.size();
    //        for(int i=0; i<size; i++) {
    //            if("张".equals(list.get(i))) {
    //                list.remove(i);
    //            }
    //        }
            //java.lang.IndexOutOfBoundsException: Index: 4, Size: 4    
            //数组下标越界异常
            
            
    //        for(int i=0; i<list.size(); i++) {
    //            if("张".equals(list.get(i))) {
    //                list.remove(i);
    //            }
    //        }
            //移除结果:马 张 马  马
            //遍历删除数组小标为1的张后,数组下标为2的张向前移动下标变为1,
            //下标为1已经遍历过所以漏删了
            
            //以上情形两种解决方案:
            //变换下标
    //        for(int i=0; i<list.size(); i++) {
    //            if("张".equals(list.get(i))) {
    //                list.remove(i);
    //                i--;
    //            }
    //        }
            
            //倒序移除元素,不影响数组顺序
            for(int i=list.size()-1; i>-1; i--) {
                if("张".equals(list.get(i)))
                    list.remove(i);
            }
            //移除结果: 马 马 马
            
    //        for(String str : list) {
    //            if("张".equals(str)) {
    //                list.remove(str);
    //            }
    //        }
            // java.util.ConcurrentModificationException  并发修改异常
            // 原因https://www.cnblogs.com/huangjinyong/p/9455163.html
            //解决方案:使用Iterator迭代器的remove()
    
            
    //        Iterator<String> iterable = list.iterator();
    //        while(iterable.hasNext()) {
    //            if("张".equals(iterable.next())) {
    //                iterable.remove();
    //            }
    //        }
            //移除结果: 马 马 马
            
            for(int i=0; i<list.size(); i++) {
                System.out.println(list.get(i));
            }
            
        }
        
    }
  • 相关阅读:
    js--获得当前系统时间
    关于react记录
    循环运用记录
    react native环境的搭建
    video,audio的使用细则
    mongoDB 将mongodb添加到服务
    react 全选和全不选
    人生那么多不确定,你怕什么
    select样式的重写
    关于动态插入出现undefined
  • 原文地址:https://www.cnblogs.com/mxh-java/p/11176026.html
Copyright © 2011-2022 走看看