list删除时报错ConcurrentModificationException错误

//返回结果集
List<PollutionTraceability> dmList = mapper.getDmData(params);
if(dmList !=null && dmList.size()>0){
	//选哦删除的结果list
	List<PollutionTraceability> lst = new ArrayList<PollutionTraceability>();
	for (PollutionTraceability pTraceability : dmList) {
		List<PollutionTraceabilityFactor> yzList = mapper.getFactorData(pTraceability.getResultId());
		if(yzList != null && yzList.size()>0){
			pTraceability.setList(yzList);
		}else {
			lst.add(pTraceability);
		}
	}
	dmList.removeAll(lst);
}
return dmList;

/**  
 * 使用增强的for循环  
 * 在循环过程中从List中删除非基本数据类型以后,
 * 继续循环List时会报ConcurrentModificationException  
 */    
public void listRemove() {    
    List<Student> students = this.getStudents();    
    for (Student stu : students) {    
        if (stu.getId() == 2)     
            students.remove(stu);    
    }    
} 
/**  
 * 像这种使用增强的for循环对List进行遍历删除,但删除之后马上就跳出的也不会出现异常  
 */    
public void listRemoveBreak() {    
    List<Student> students = this.getStudents();    
    for (Student stu : students) {    
        if (stu.getId() == 2) {    
            students.remove(stu);    
            break;    
        }    
    }    
}   

/**  
 * 这种不使用增强的for循环的也可以正常删除和遍历,  
 * 这里所谓的正常是指它不会报异常,但是删除后得到的  
 * 数据不一定是正确的,这主要是因为删除元素后,被删除元素后  
 * 的元素索引发生了变化。假设被遍历list中共有10个元素,当  
 * 删除了第3个元素后,第4个元素就变成了第3个元素了,第5个就变成  
 * 了第4个了,但是程序下一步循环到的索引是第4个,  
 * 这时候取到的就是原本的第5个元素了。  
 */    
public void listRemove2() {    
    List<Student> students = this.getStudents();    
    for (int i=0; i<students.size(); i++) {    
        if (students.get(i).getId()%3 == 0) {    
            Student student = students.get(i);    
            students.remove(student);    
        }    
    }    
}    

/**不加上break会报Exception in thread "main" java.util.ConcurrentModificationException错误*/
public class 删除list其中一条数据 {
	public static void main(String[] args) {
        List<String> strList = new ArrayList<String>();  
        strList.add("string1");  
        strList.add("string2");  
        strList.add("string3");  
        strList.add("string4");  
        strList.add("string5");  
        strList.add("string6");  
        // 操作方式1:while(Iterator);报错  
        Iterator<String> it = strList.iterator();  
        while(it.hasNext()) {  
            String s = it.next();  
            if("string2".equals(s)) {  
                strList.remove(s);  
                break; 
            }  
        } 
        System.out.println(strList);
	}
}
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值