对list做foreach循环时,循环代码中不能修改list的结构

时间:2021-08-27 19:36:40

分析

  在 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就会发生变化。