Java_基础—三种迭代的能否删除

package com.soar.generic;

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

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

        //remove_Iterator();

        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        //3. 增强for循环,不能删除,只能遍历,因为它的底层是使用迭代器进行遍历的
        for (String string : list) {
            if("b".equals(string)){
                list.remove("b");
            }
        }
    }

private static void remove_Iterator() {
    //2.迭代器删除
    ArrayList<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");

    Iterator<String> it = list.iterator();
    while(it.hasNext()){
        if("b".equals(it.next())){
            //list.remove("b");     //不能用集合的删除方法,因为迭代过程中如果修改会出现并发修改异常
            it.remove();
        }
    }
    //while 和 for 循环一样
    for(Iterator<String> it2 = list.iterator(); it2.hasNext();){
        if("b".equals(it.next())){
            //list.remove("b");     //不能用集合的删除方法,因为迭代过程中如果修改会出现并发修改异常
            it.remove();
        }
    }
    System.out.println(list);   //[a, c, d]
}

private static void remove_for() {
    ArrayList<String> list = new ArrayList<>();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");

    //1.普通for循环删除,索引要--
    for (int i = 0; i < list.size(); i++) {
        if("b".equals(list.get(i))){
            list.remove(i--);           //通过索引删除元素
        }
    }
    System.out.println(list);   //[a, c, d]
}

}
posted @ 2017-07-14 16:40  Soar_Sir  阅读(152)  评论(0编辑  收藏  举报