关于List的remove()方法

2019年9月12日更新
评论中提到的从后往前删除的方法对于本文中是可行的,当时写的时候没考虑到。

今天有一个需求是需要将查询结果list进行遍历,找出其中isActived(是否有效字段)为无效的放在list的最后面。
大意之下写下以下错误代码:

for(int i=0;i<serviceList.size();i++){
				String isActived = serviceList.get(i).getIsActived();
				if("无效".equals(isActived)){
					Service s = serviceList.get(i);
					serviceList.remove(i);
					serviceList.add(s);
				}
			}

正确代码如下:

	List<Service> newList = new ArrayList<Service>();
			for(int i=0;i<serviceList.size();i++){
				String isActived = serviceList.get(i).getIsActived();
				if("无效".equals(isActived)){
					Service s = serviceList.get(i);
					newList.add(s);
				}
			}
			for(int i=0;i<newList.size();i++){
				serviceList.remove(newList.get(i));
			}
			serviceList.addAll(newList);

总结:list在执行remove方法后会删除某个元素,然后之后的每一个元素都会向前移动一个下标,所以在循环中不能使用remove方法!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值