声明一个arraylist 里面放几个元素,遍历删除。可以遍历数组删除或者iterator删除。
总计几个安全删除的方法。
先添加数组元素
List<Integer> array = new ArrayList<>();
array.add(1);
array.add(1);
array.add(2);
array.add(3);
array.add(4);
array.add(5);
array.add(1);
第一种方法:iterator删除
Iterator iterator = array.iterator();
while (iterator.hasNext()){
Integer i = (Integer) iterator.next();
if (i.equals(1)){
iterator.remove();
}
}
这里需要注意不要使用list的remove方法不然会报错。要是用iterator的remove方法
第二种方法:倒叙删除数组元素
for (int i = array.size()-1;i>=0;i--){
if (array.get(i).equals(1)){
array.remove(i);
}
}
有问题的代码:顺序删除
System.out.println("当前长度:"+array.size());
for (int i=0;i<array.size();i++){
if (array.get(i).equals(1)){
array.remove(i);
}
System.out.println("当前长度:"+array.size());
}
System.out.println("当前长度:"+array.size());
原因是删除某个元素后,list的大小发生了变化,而索引也在变化,所以会导致在遍历的时候漏掉某些元素。比如当删除第1个元素后,继续根据索引访问第2个元素时,因为删除的关系后面的元素都往前移动了一位,所以实际访问的是第3个元素。这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用。