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