/**
* 该方法虽然不报错,但会漏掉删除对象的下一个对象的判断
* @param list
* @return
*/
private static List<Data> removefor1(List<Data> list){
for (int i=0; i<list.size(); i++){
Data cbd = list.get(i);
if("2".equalsIgnoreCase(cbd.getDatauuid())){
list.remove(cbd);//删除后,size更新,但i仍然加1,跳过了删除对象的下一个。此方法有问题,不可使用。会漏掉删除对象的下一个对象。
}
}
return list;
}
/**
* 该方法执行会报并发错误
* @param list
* @return
*/
private static List<Data> removefor2(List<Data> list){
for (Data cbd: list){
if("2".equalsIgnoreCase(cbd.getDatauuid())){
list.remove(cbd);//删除后,下一个循环,报错跳出,程序停止。java.util.ConcurrentModificationException
}
}
return list;
}
/**
* 该方法正确,可以使用,且未报错
* @param list
* @return
*/
private static List<Data> removeiterator(List<Data> list){
Iterator<Data> it = list.iterator();
while(it.hasNext()){
Data cbd = it.next();
if("2".equalsIgnoreCase(cbd.getDatauuid())){
it.remove();//删除后,size和next指向都更新了,而且是正确的。此方法可以使用。未报并发错误。
}
}
return list;
}
//list是引用类型,执行此方法后,调用处的list已经发生变化
private static void removeiterator2(List<Data> list){
Iterator<Data> it = list.iterator();
while(it.hasNext()){
Data cbd = it.next();
if("2".equalsIgnoreCase(cbd.getDatauuid())){
it.remove();//删除后,size和next指向都更新了,而且是正确的。此方法可以使用。未报并发错误。
}
}
}
删除list中的元素
最新推荐文章于 2024-06-23 15:11:07 发布