Java动态遍历List 时删除List特征元素

来源:互联网 发布:最强的国际象棋软件 编辑:程序博客网 时间:2024/06/04 19:04

用哪种方式可以安全有效的实现遍历list删除某些特征元素?

方式:

方法1、普通for循环 遍历List,删List除自身 特征条目;

方法2、高级for循环 遍历List,删除List自身 特定条目;

方法3、引入参考List,for循环遍历删除原List 特定条目;

方法4、利用iterator 遍历删除List特定条目


结论:

方法1:不会抛异常 但结果 未必正确 由于list.size()在变动 根据脚标删除的未必是 特征元素;

方法2:会抛异常 :java.util.ConcurrentModificationException;

java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:819)
at java.util.ArrayList$Itr.next(ArrayList.java:791)

方法3:可实现目的,通过引入一个参考list for循环遍历参考list 在循环过程中 满足条件出 删除原list条目,可以达到所需目的;

方法4:可实现目的,通过list.iterator();方法拿到iterator对象 调用iterator.remove();方法可达到所需目的且不会抛异常。



这个问题 最好亲自运行代码,尝试,方能更好理解。


不废话,上代码,自己运行一下便可:

package com.kevin.test; import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Random; /** * 动态删除 List 特征元素 示例 *  * @author blj *  */public class TestMain{     static class Bean    {         private String name;         public String getName()        {            return name;        }         public void setName(String name)        {            this.name = name;        }     }     /**     * @param args     */    public static void main(String[] args)    {         dynamicRemoveItemFromListDemo();    }     /**     * 动态删除List元素示例     */    public static void dynamicRemoveItemFromListDemo()    {         List<bean> list = getList();         System.out.println("原始数据:");        printList(list);         // 使用普通for循环遍历List删除自身元素 不报错 但结果 未必正确        normalRemoveMethod(list);         // 使用高级for循环遍历List删除自身元素 报错        // try        // {        // superRemoveMethod(list);        // }        // catch (Exception e)        // {        // System.err.println("高级for循环报错:");        // e.printStackTrace();        // }         // 引入参考List 遍历删除方法        // referenceRemoveMethod(list);         // iterator遍历删除方法        // iteratorRemoveMethod(list);         System.out.println("结果数据:");        printList(list);     }     /**     * 打印 List 方法     *      * @param list     */    private static void printList(List<bean> list)    {        for (Bean item : list)        {            System.out.print(item.getName() + " ");        }        System.out.println();    }     /**     * 利用普通for循环遍历删除元素     *      * @param list     */    private static void normalRemoveMethod(List<bean> list)    {        for (int i = 0; i < list.size(); i++)        {            if (list.get(i).getName().equals("A"))            {                list.remove(list.get(i));            }        }    }     /**     * 利用高级for循环遍历删除元素(会报异常)     *      * @param list     */    private static void superRemoveMethod(List<bean> list)    {        // 方法一        for (Bean item : list)        {            if (item.getName().equals("A"))            {                list.remove(item);            }        }    }     /**     * 有效的for循环遍历删除元素(正常 达到预期目的)     *      * @param list     */    private static void referenceRemoveMethod(List<bean> list)    {        List<bean> referenceList = new ArrayList<bean>();        referenceList.addAll(list);         for (int i = 0; i < referenceList.size(); i++)        {            if (referenceList.get(i).getName().equals("A"))            {                list.remove(referenceList.get(i));            }        }    }     /**     * 使用Iterator的方式也可以顺利删除和遍历     */    public static void iteratorRemoveMethod(List<bean> list)    {        Iterator<bean> it = list.iterator();        while (it.hasNext())        {            Bean student = it.next();            if (student.getName().equals("A"))                it.remove();        }    }     /**     * 获取List方法     *      * @return     */    private static List<bean> getList()    {        List<bean> list = new ArrayList<bean>();         for (int i = 0; i < 50; i++)        {            Bean item = new Bean();            int j = i + new Random().nextInt();            if (j % 3 == 1)            {                item.setName("A");            }            else if (j % 3 == 2)            {                item.setName("B");            }            else            {                item.setName("C");            }             list.add(item);        }        return list;    } }


原创粉丝点击