关于删除List中的某些element的方法

来源:互联网 发布:中国人口数据分析 编辑:程序博客网 时间:2024/06/06 01:26

在开发中经常会遇到需要删除List中的某些特定的element的地方,这时是不能直接遍历+remove的。


以这样一个List为例: List<String> ,删除其中为空的String。

1. 遍历+remove (这种方法是行不通的)

/**     * Remove empty string from a list.     *      * @param srcList     * @return     */    private static void removeElementFromList3(List<String> srcList) {        if (srcList != null) {            for (String str : srcList) {                if (str.length() == 0) {                    srcList.remove(str);                }            }        }    }

运行会报错:

Exception in thread "main" java.util.ConcurrentModificationException

at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)

at java.util.AbstractList$Itr.next(AbstractList.java:343)

at HelloWorld.removeElementFromList3(HelloWorld.java:87)

at HelloWorld.main(HelloWorld.java:28)


2.可行的方法一: 对原来的List先copy,在遍历+remove

/**     * Remove empty string from a list.     *      * @param srcList     * @return     */    private static void removeElementFromList1(List<String> srcList) {        if (srcList != null) {            List<String> copyList = new ArrayList<String>();            copyList.addAll(srcList);            for (String str : copyList) {                if (str.length() == 0) {                    srcList.remove(str);                }            }        }    }

3. 可行的方法二: 采用 Iterator

/**     * Remove empty string from a list.     *      * @param srcList     * @return     */    private static void removeElementFromList2(List<String> srcList) {        if (srcList != null) {            Iterator<String> it = srcList.iterator();            while (it.hasNext()) {                if (it.next().length() == 0) {                    it.remove();                }            }        }    }


0 0