1.1以后删除指定的集合中的元素时,建议使用迭代器的remove方法的方式删除元素。

1.2在增强for循环中不要删除元素,否则抛出异常;

package com.ydlclass.collection;

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

public class ArrayListDeleteTest {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<>();
        arrayList.add("nihao");
        arrayList.add("nihao");
        arrayList.add("ok");
        arrayList.add("123");
        //arrayList.remove("nihao");//remove只会删除第一个元素;
        //使用上面的方式无法完全删除元素,这个问题的产生主要在于remove方法;首先0位置会被删除,
        // 删除完了之后指针会指向下一位,但是此时数组中元素会被移动,所以有一个元素没被删除。
        //矛盾点在于每次删除一个元素指针就会往后挪动一位,但由于删除此时也就发生了元素回滚的问题;
        //解决的办法是指针回调
        //删除相同的元素

        //遍历的方式一:同样是删除一个重复的元素不同的方法带来的效果不一样
        for (int i = 0; i < arrayList.size(); i++){
            if ("nihao".equals(arrayList.get(i))){
                arrayList.remove(i);
                i--;//指针回调,如果不加idea会显示黄色提示可能存在问题
            }
        }

        //遍历的方式二://这种方式就不需要指针回调,原因在于是后面的节点往前移动,不会影响需要检查的其他节点;
        for (int i = arrayList.size() - 1; i >= 0 ; i--) {
            if ("nihao".equals(arrayList.get(i))){
                arrayList.remove(i);
            }
        }
        //遍历的方式三:前面的两种不适合set和map两种方式;
        Iterator<String> iterator = arrayList.iterator();
        for (;iterator.hasNext();){
            if ("nihao".equals(iterator.next())){
                iterator.remove();//此处必须使用迭代器的remove方法;使用对象的remove方法会出现并发问题;
            }
        }

        System.out.println(arrayList);
        


    }
}