java for循环 删除元素_ArrayList在for循环中使用remove方法移除元素方法介绍

导读热词

有时候我们需要在一个ArrayList的for循环中动态删除元素的需求,废话不多说看代码

List list = new ArrayList();

list.add(0);

list.add(1);

list.add(2);

list.add(3);

list.add(4);

list.add(5);

list.add(6);

list.add(7);

//正常循环

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

System.out.println("i的值:" + i + " 对应的数字:" + list.get(i));

}

System.out.println("没有remove前list的项:"+list.size());

//边循环边删除

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

System.out.println("i的值:" + i + " 对应的数字:" + list.get(i));

if(list.get(i) == 3) list.remove(list.get(i));//删除list的第四项

}

System.out.println("remove后list的项:"+list.size());

System.out.println("==========remove后的list==========");

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

System.out.println("i的值:" + i + " 对应的数字:" + list.get(i));

}

执行代码,结果如下:

i的值:0 对应的数字:0

i的值:1 对应的数字:1

i的值:2 对应的数字:2

i的值:3 对应的数字:3

i的值:4 对应的数字:4

i的值:5 对应的数字:5

i的值:6 对应的数字:6

i的值:7 对应的数字:7

没有remove前list的项:8

i的值:0 对应的数字:0

i的值:1 对应的数字:1

i的值:2 对应的数字:2

i的值:3 对应的数字:3

i的值:4 对应的数字:5

i的值:5 对应的数字:6

i的值:6 对应的数字:7

remove后list的项:7

==========remove后的list==========

i的值:0 对应的数字:0

i的值:1 对应的数字:1

i的值:2 对应的数字:2

i的值:3 对应的数字:4

i的值:4 对应的数字:5

i的值:5 对应的数字:6

i的值:6 对应的数字:7

可以看到没有删除前,我们的list的项和循环对应的数字都是正确的,但是下面的循环在删除第4个元素后,第4,5,6个项对应的数字本应该是4,6,但是这里却变成了5,7.

原因是,我们删除第4项后,list的长度就变成7,而且,list会把第4项后面的值往前移一位,也就是说,i=3时,list.get(i)=4,i=4时,list.get(i)=5,i=5时,list.get(i)=6,i=6时,list.get(i)=7..  我们再说的形象一点,就是本来有8层糕点,依次是0-7,竖起来,大的在上,小的在下,我们从下往上数,数到第5个的时候,吃掉这一层糕点,这时,上面三层分别往下移了一层

所以,值为4的项我们根本没有循环到

那有什么方法可以实现remove呢,有个笨方法,是新建一个tempList,把要删除的项全部add进去,最后用list.removeAll(tempList)实现 . 但是这里我们有更好的方法,就是倒序删除

还是上面的例子,我们看代码:

List list = new ArrayList();

list.add(0);

list.add(1);

list.add(2);

list.add(3);

list.add(4);

list.add(5);

list.add(6);

list.add(7);

//正常循环

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

System.out.println("i的值:" + i + " 对应的数字:" + list.get(i));

}

System.out.println("没有remove前list的项:"+list.size());

//边循环边删除

for (int i = list.size() -1 ; i >= 0; i--) {

System.out.println("i的值 " + i + " 对应的数字 " + list.get(i));

if(list.get(i) == 3) list.remove(list.get(i));

}

System.out.println("remove后list的项:"+list.size());

System.out.println("==========remove后的list==========");

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

System.out.println("i的值 " + i + " 对应的数字 " + list.get(i));

}

执行代码,结果如下:

i的值:0 对应的数字:0

i的值:1 对应的数字:1

i的值:2 对应的数字:2

i的值:3 对应的数字:3

i的值:4 对应的数字:4

i的值:5 对应的数字:5

i的值:6 对应的数字:6

i的值:7 对应的数字:7

没有remove前list的项:8

i的值 7 对应的数字 7

i的值 6 对应的数字 6

i的值 5 对应的数字 5

i的值 4 对应的数字 4

i的值 3 对应的数字 3

i的值 2 对应的数字 2

i的值 1 对应的数字 1

i的值 0 对应的数字 0

remove后list的项:7

==========remove后的list==========

i的值 0 对应的数字 0

i的值 1 对应的数字 1

i的值 2 对应的数字 2

i的值 3 对应的数字 4

i的值 4 对应的数字 5

i的值 5 对应的数字 6

i的值 6 对应的数字 7

我们可以看到变循环变删除,并不影响后面的元素,remove后的list也和第一次的结果是一样的 . 这是因为我们删除list元素,list的长度是会变小,但是变化的只是比当前被删除元素的项大的项,而我们这里使用倒序循环,大的项,我们已经执行过了,所以不会影响.. 再用上面的比喻来说明,这次我们是从上往下数,数到第4个的时候,上面三层分别往下移了一层,但是这不影响我们之前数过的蛋糕,而且对下面的蛋糕也不影响,这就是原理

总结

以上就是本文关于ArrayList在for循环中使用remove方法移除元素方法介绍的全部内容,希望对大家有所帮助。感兴趣的朋友可以参阅:Java实现跳跃表(skiplist)的简单实例   Java多线程ForkJoinPool实例详解  等。感谢朋友们对编程小技巧网站的支持。有什么问题或者想要了解的可以随时给我们留言,小编会及时回复大家的。

相关文章

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值