A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© gss 中级黑马   /  2015-10-4 16:20  /  368 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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);
        }

}

1 个回复

倒序浏览
为什么增强for不行呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马