黑马程序员技术交流社区

标题: 在遍历过程中对集合进行删除 [打印本页]

作者: gss    时间: 2015-10-4 16:20
标题: 在遍历过程中对集合进行删除
package arraylist;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

public class ForDemo {
        /*
         * 普通for循环,可以删除,但是索引要--
         * 迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常
         * 增强for循环不能删除
         */
        public static void main(String[] args) {
                // demo1();
                //demo2();
                //demo3();
        }


        private static void demo3() {
                ArrayList<String> list = new ArrayList<String>();
                list.add("a");
                list.add("b");
                list.add("b");
                list.add("b");
                list.add("c");
                list.add("d");
                for (String string : list) {//ConcurrentModificationException不能用增强for删除,会产生并发异常
                        if("b".equals(string))
                                list.remove(string);
                       
                       
                }
                System.out.println(list);
        }
       

        private static void demo2() {
                //迭代期可以删除,但是切记要用迭代期自己的方法进行删除
                ArrayList<String> list = new ArrayList<String>();
                list.add("a");
                list.add("b");
                list.add("b");
                list.add("b");
                list.add("c");
                list.add("d");
                // for (Iterator<String> it = list.iterator(); it.hasNext();) {
                // String s = it.next();
                // if ("b".equals(s)) {
                // it.remove();//此处一定一定要注意要用迭代期自带的方法进行删除,千万不能用集合中的方法删除,否则会报并发修改异常!
                //
                // }
                //
                // }
                // System.out.println(list);
                for (ListIterator<String> it = list.listIterator(); it.hasNext();) {
                        String s = it.next();
                        if ("b".equals(s)) {
                                it.remove();

                        }

                }
                System.out.println(list);
        }

        private static void demo1() {
                ArrayList<String> list = new ArrayList<String>();
                list.add("a");
                list.add("b");
                list.add("b");
                list.add("b");
                list.add("c");
                list.add("d");
                for (int i = 0; i < list.size(); i++) {
                        if ("b".equals(list.get(i))) {
                                list.remove(i);
                                i--;// 普通for可以删除一定要记得进行--操作,因为移除某个元素后,索引自动跳到下一个,如果正好跳到那个该删除的元素那里,便删除不了了。

                        }

                }
                System.out.println(list);
        }

}

作者: lostyou    时间: 2015-10-4 16:44
为什么增强for不行呢?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2