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 = ...
随机推荐
- 91. ExtJS获取父子、兄弟容器元素方法
转自:https://blog.csdn.net/u014745818/article/details/44957341 1 1.当前对象的父对象(上级对象) this.ownerCt: 2.当前对象 ...
- Coursera Algorithms week1 查并集 练习测验:1 Social network connectivity
题目原文描述: Given a social network containing. n members and a log file containing m timestamps at which ...
- CSS实现列表li边框重合问题
CSS实现列表li边框重合问题 2017年04月13日 21:04:18 阅读数:5066 在我们写东西的时候经常要用到ul,但是也经常会出现li边框重合的问题,如下图: 可以看到每个格子的右边框和 ...
- codevs1959拔河比赛(二维费用背包)
1959 拔河比赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 一个学校举行拔河比赛,所有的人被分成了两组,每个人 ...
- Appium + python - swipe滑屏操作实例
方法一: from appium import webdriverfrom time import sleep descred_caps = { "platformName":&q ...
- 通过DOM实现点击隐藏父元素
HTML代码简单如下: <ul id='ul1'> <li><a href="javascript:">1</a></li&g ...
- Nginx报错-找不到路径
前言 最近在git bash里输入命令启动Nginx服务,总提示找不到路径,令我困惑不已 我反复检查安装路径和输入命令,确认无误 小技巧:复制路径可直接ctrl+c后在git ba ...
- 2019手机号码JS正则表达式
前端的正则表达式验证往往是最繁多最复杂的,所以整理了一些最近自己常用的正则表达式,希望能对大家有所帮助! /* 合法uri */ export function validateURL(textval ...
- Selenium获取input值的两种方法:WebElement.getAttribute("value")和WebElement.getText()
在页面元素的定位中,有时候需要获取到元素的页面显示值,用来作为断言.例如,我需要获取email的值"amy1111@xxx.com". <input class=" ...
- 导入不同业务数据通过Excel实现
很多公司都用到了老系统移植到新系统,数据自然也需要迁移,这个解决方案之一就是使用Excel文件导入. 结合公司实现,然后简单写了个Demo. (PS:去找朋友本想着花几十分钟弄出来炫耀一波,结果花了三 ...