java for循环删除元素_java中使用for循环删除集合中元素的注意点

场景:使用for循环删除集合中的指定元素

定义一个list集合,并添加数据:

List list=new ArrayList<>();

list.add("b");

list.add("e")

list.add("b");

list.add("c");

需求:删除该集合中所有字符串为b的数据,代码如下:

for (int i = 0; i < list.size(); i++) {

if("b".equals(list.get(i))) {

list.remove(i);

}

}

运行结果如下图:

a4ed1cf503f32bfe3ee4d97d66f8141e.png

我们可以看到删除成功,看起来没有问题,下面我们更改一下集合中元素的顺序:

List list=new ArrayList<>();

list.add("b");

list.add("b");

list.add("e");

list.add("c");

再次运行,运行结果如下:

17f7e89792730f6f55b55075c8241b08.png

奇怪的事情发生了,当删除相邻重复元素的时候只删除一个,这是什么原因呢?

ArrayList的底层结构是数组类型,数组这种数据结构的特点是删除其中某个元素时,后面的所有元素索引都会前移,此时for循环的指针却会下移,因此会略过下一个元素,解决方案是删除时将指针回调一次:

for (int i = 0; i < list.size(); i++) {

if("b".equals(list.get(i))) {

list.remove(i);

i--;

}

}

此时运行才会得到想要的结果。

备注:这个问题只会出现在使用for进行遍历的时候,使用迭代器来操作时,不会出现这种问题:

Iterator it=list.iterator();

while(it.hasNext()) {

if("b".equals(it.next())) {

it.remove();

}

}

运行正常。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值