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));
            }
            
        }
        
    }
  • 相关阅读:
    [极客大挑战 2019]EasySQL
    BUUCTF-[强网杯 2019]随便注-wp
    BUUCTF-[HCTF 2018]WarmUp-wp
    wp-2017ssrfme
    < 算法笔记(晴神宝典)
    < python音频库:Windows下pydub安装配置、过程出现的问题及常用API >
    < JAVA
    < 博客园自定义皮肤装饰代码
    <编译原理
    < AlexNet
  • 原文地址:https://www.cnblogs.com/mxh-java/p/11176026.html
Copyright © 2011-2022 走看看