zoukankan      html  css  js  c++  java
  • 对list做foreach循环时,循环代码中不能修改list的结构

    分析

      在 jdk1.5 版以上的 foreach 循环写法中,不能在循环代码中对正在循环的 list 的结构进行修改,即对 list做add、 remove等操作,如果做了这些操作,必须立即退出循环,否则会抛出异常。


    示例


      代码示例待补全。

        public static void main(String[] args)
        {
            List list = new ArrayList();
            list.add("one");
            list.add("two");
            list.add("two");
            list.add("two");
    
            // 迭代器删除List中元素使用迭代器
            deleteElementA(list);
    
            //list做删除操作时,使用迭代器,不要使用i的计数,因为删除后,它的Size就会发生变化
            deleteElementB(list);
        }
    
        /**
         * 使用迭代器删除List中元素使用迭代器
         * 
         * @param list
         */
        private static void deleteElementA(List list)
        {
            for (Iterator iter = list.iterator(); iter.hasNext();)
            {
                String item = (String) iter.next();
                if (item.equals("two"))
                {
                    iter.remove();
                }
            }
        }
    
        /**
         * 对list做foreach循环时,循环代码中不能修改list的结构 可以先找出具体要操作的元素在循环体外进行变更操作
         * 
         * @param list
         */
        private static void deleteElementB(List list)
        {
            for (int i = 0; i < list.size(); i++)
            {
                String item = (String) list.get(i);
                if (item.equals("two"))
                {
                    list.remove(i);
                }
            }
        }

    总结:list做删除操作时,使用迭代器,不要使用i的计数,因为删除后,它的Size就会发生变化。

  • 相关阅读:
    Luogu P4316 绿豆蛙的归宿 题解报告
    Luogu P1850 换教室(NOIP 2016) 题解报告
    Rainbow的信号 题解报告
    $CH5105 Cookies$ 线性$DP+$贪心
    算法竞赛 $0×50$ 动态规划 (+一本通
    $CH5104 I-country$ 线性$DP$
    洛谷$2014$ 选课 背包类树形$DP$
    $SP703 Mobile Service DP$
    $POJ1015 Jury Compromise Dp$/背包
    $POJ1742 Coins$ 多重背包+贪心
  • 原文地址:https://www.cnblogs.com/lltse/p/2670642.html
Copyright © 2011-2022 走看看