List中remove()方法的陷阱

Java的List在删除元素时,一般会用list.remove(o)/remove(i)方法。在使用时,容易触碰陷阱,得到意想不到的结果。

首先初始化List,代码如下:

package com.cicc.am.test;
import java.util.ArrayList;
import java.util.List;
public class ListTest {
 public static void main(String[] args) {
  List<Integer> list=new ArrayList<Integer>();
  list.add(1);
  list.add(2);
  list.add(3);
  list.add(3);
  list.add(4);
  System.out.println(list);
 }
}

🈲1、普通for循环遍历List删除指定元素【错误】

for(int i=0;i<list.size();i++){
   if(list.get(i)==3) {
        list.remove(i);
    }
}
System.out.println(list);

输出结果:[1, 2, 3, 4]

为什么元素3只删除了一个?本以为这代码再简单不过,可还是掉入了陷阱里,上面的代码这样写的话,元素3是过滤不完的。只要list中有相邻2个相同的元素,就过滤不完。

List调用remove(index)方法后,会移除index位置上的元素,index之后的元素就全部依次左移,即索引依次-1要保证能操作所有的数据,需要把index-1,否则原来索引为index+1的元素就无法遍历到(因为原来索引为index+1的数据,在执行移除操作后,索引变成index了,如果没有index-1的操作,就不会遍历到该元素,而是遍历该元素的下一个元素)。

如果这样,删除元素后同步调整索引或者倒序遍历删除元素,是否可行呢?

♥️2、for循环遍历List删除元素时,让索引同步调整【正确】

        for (int i = 0; i < list.size(); i++) {
            if(list.get(i) == 3){
                list.remove(i--);
            }
        }

输出结果:[1, 2, 4]

♥️3、倒序遍历List删除元素【正确】


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值