Java循环遍历中直接修改遍历对象
Java 循环遍历中直接修改遍历对象如下,会报异常:
for (ShopBaseInfo sp: sourceList) {
if(sp.getId()==5){
sourceList.remove(sp);
}
}
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
如果有需要修改循环遍历对象的需求,可以使用迭代器来实现,代码如下:
/**
* @author jack
**/
public class ForLoopTest { public static void main(String[] args) {
List<ShopBaseInfo> sourceList = new ArrayList<ShopBaseInfo>();
ShopBaseInfo shop = null;
for (long i=0 ;i<8;i++){
shop = new ShopBaseInfo();
shop.setId(i);
shop.setShopName("shop"+i);
sourceList.add(shop);
}
System.out.println("sourcelist init --------");
printList(sourceList);
/* for (ShopBaseInfo sp: sourceList) {
if(sp.getId()==5){
sourceList.remove(sp);
}
}*/ Iterator<ShopBaseInfo> iterator = sourceList.iterator();
while (iterator.hasNext()) {
ShopBaseInfo sbi = iterator.next();
if(sbi.getId() == 5){
iterator.remove();
}
}
System.out.println("after sourcelist remove --------");
printList(sourceList);
} private static void printList(List<ShopBaseInfo> sourceList){
StringBuilder builder = new StringBuilder();
for (ShopBaseInfo shop : sourceList ) {
builder.append("->").append(shop.getShopName());
} System.out.println(builder);
}
}
运行结果:
sourcelist init --------
->shop0->shop1->shop2->shop3->shop4->shop5->shop6->shop7
after sourcelist remove --------
->shop0->shop1->shop2->shop3->shop4->shop6->shop7
Java循环遍历中直接修改遍历对象的更多相关文章
- java xml文件中相同Id遍历
import java.io.File;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentExcepti ...
- JAVA循环迭代中删除或添加集合数据报java.util.ConcurrentModificationException错误
1.写出下面的输出结果 public class test{ public static void main(String [] args) List<String> list = new ...
- 深入理解Javascript中构造函数和原型对象的区别
在 Javascript中prototype属性的详解 这篇文章中,详细介绍了构造函数的缺点以及原型(prototype),原型链(prototype chain),构造函数(constructor) ...
- 深入理解Javascript中构造函数和原型对象的区别(转存)
Object是构造函数,而Object.prototype是构造函数的原型对象.构造函数自身的属性和方法无法被共享,而原型对象的属性和方法可以被所有实例对象所共享. 首先,我们知道,构造函数是生成对象 ...
- Java线程并发中常见的锁
随着互联网的蓬勃发展,越来越多的互联网企业面临着用户量膨胀而带来的并发安全问题.本文着重介绍了在java并发中常见的几种锁机制. 1.偏向锁 偏向锁是JDK1.6提出来的一种锁优化的机制.其核心的思想 ...
- Java线程并发中常见的锁--自旋锁 偏向锁
随着互联网的蓬勃发展,越来越多的互联网企业面临着用户量膨胀而带来的并发安全问题.本文着重介绍了在java并发中常见的几种锁机制. 1.偏向锁 偏向锁是JDK1.6提出来的一种锁优化的机制.其核心的思想 ...
- SQL Server修改数据库对象所有者(Owner)浅析
在SQL Server数据库中如何修改数据库对象(表.视图.存储过程..)的所有者(Owner)呢?一般我们可以使用系统提供的系统存储过程sp_changeobjectowner来修改. 我们先看看s ...
- Java中四种遍历Map对象的方法
方法一:在for-each循环中使用entry来遍历,通过Map.entrySet遍历key和value,这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Int ...
- Java中ArrayList边遍历边修改
用for-each 边遍历ArrayList 边修改时: public static void main(String[] args) { ArrayList<String> list = ...
随机推荐
- 【转】UINavigationController 直接返回到第一级目录
原文网址:http://blog.csdn.net/justinjing0612/article/details/7360852 [self.navigationController popViewC ...
- C# Task 源代码阅读(2)
上篇已经讲到Task 的默认的TaskScheduler 为ThreadPoolTaskScheduler. 这时我们回到原来的task 的start方法,在代码最后,调用了 ScheduleAndS ...
- 多线程编程和Java网络编程
1. 线程概述 多任务处理有两种类型:基于进程.基于线程(进程是指一种“自包容”的运行程序,有自己的地址空间; 线程是进程内部单一的一个顺序控制流) 基于进程的特点是允许计算机同时运行两个或更多的程序 ...
- Android对话框与Activity共存时的异常
异常提示信息 01-01 18:30:38.630: E/WindowManager(14537): Activity com.jack.outstock.activity.ManageCustomA ...
- Websocket实现前后台通信,demo小测试
新需求大概如下:用户登录系统,登录成功之后建立websocket连接,实现通信 总体思路:前端不是我负责,只是简单的做个功能,先实现登录,把用户标识存入HttpSeesion,再建立websocket ...
- Python生成器(yield)
对于调用一个普通的Python函数,一般是从函数的第一行代码开始执行,结束于return语句.异常或者函数所有语句执行完毕.一旦函数将控制权交还给调用者,就意味着全部结束.函数中做的所有工作以及保存在 ...
- POJ 1330 Tarjan LCA、ST表(其实可以数组模拟)
题意:给你一棵树,求两个点的最近公共祖先. 思路:因为只有一组询问,直接数组模拟好了. (写得比较乱) 原题请戳这里 #include <cstdio> #include <bits ...
- C - Arrival of the General
Problem description A Ministry for Defense sent a general to inspect the Super Secret Military Squad ...
- 苹果html上传后图片旋转问题
最近做移动web项目但是遇到在苹果设备上html上传图片后,图片传到后台是旋转的 旋转角度不一,因此再次 读取照片时,无法正常显示,目前已经找到解决方法,至于原因看不太懂 翻译过来也是完全按照单词翻译 ...
- VMWare虚拟机Centos 6.9中的 linux 配置静态ip地址上外网
1.查看网络 # ifconfig 发现网络还没有配置,ping不通 2.修改网卡配置文件 # vim /etc/sysconfig/network-scripts/ifcfg-eth0 添加如下配置 ...