Collection中的一个小问题
当使用Iterator来迭代访问Collection集合元素时,Collection集合里的元素不能被改变,只有通过Iterator的remove()来删除上一次next()方法返回的集合元素才可以。否则将会引发java.util.ConcurrentModificationException异常。
例如:
public class IteratorDemo{
public static void main(String[] args){
Collection books=new HashSet();
books.add("a");
books.add("b");
Iterator it=books.iterator();
while(it.hasNext()){
String book=(String) it.next();
if(book.equals("b")){
books.remove(book);//使用Iterator迭代过程中,不可修改集合元素,此句代码异常
it.remove();//从集合中删除上一次next()返回的元素
}
book="c";//对迭代变量进行赋值,但集合里的元素不会改变。因此,当使用Iterator对集合元素进行迭代时,Iterator并不是把集合元素本身传给迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身没有任何改变。
}
}
}
上面这种错误在多线程编程时尤其容易发生:程序的一条线程正在迭代访问Collection集合元素时,另一条线程修改了Collection集合,这就会导致发生异常。
注意:这里所谓的“从集合中删除上一次next()返回的元素就是指 if(book.equals("b"))中的b,即这里就是将b从集合中删除。
除了使用Iterator迭代访问Collection集合之外,JDK1.5提供的foreach循环来迭代访问集合元素更加便捷。
例如:上面代码可改为
public class ForeachDemo{
public static void main(String[] args){
Collection books=new HashSet();
books.add("a");
books.add("b");
for(object obj:books){
String book=(String) obj;//此处的book变量本身也不是集合元素本身,只是存放集合元素的值
if(book.equals("b")){
books.remove(book);//此处与上面类似,也会引发ConcurrentModificationException异常
}
}
}
Collection中的一个小问题相关推荐
- python 子图_python 实现在一张图中绘制一个小的子图方法
有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib. ...
- python画50个图-python 实现在一张图中绘制一个小的子图方法
有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib. ...
- python画简便的图-python 实现在一张图中绘制一个小的子图方法
有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib. ...
- React学习中的一个小实战(智能社)
最近在学习React,跟着前端blue大神学习基础,这是课程中的一个小案例,因为不会,希望写博客来加强记忆. 此案例是用React来实现豆瓣电影的前后端数据交互. 首先来看一下改之前的源码. 博客会附 ...
- python一张图-python 实现在一张图中绘制一个小的子图方法
有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib. ...
- 随笔:web服务器中建立一个小的个人站点
1.侃侃而谈:在web服务器中,一般我们会使用http协议,http协议基于80端口,它属于明文协议,所以会带来安全隐患.所以当我们访问一些交易网站的时侯,会使用https协议,这是一个加密协议,它会 ...
- mysql内核测试,MySQL 5.7内核复制中的一个小坑
问题背景 最近在写一个作为MySQL Slave的角色的程序,连接到MySQL Master使用MySQL复制协议来Dump Binlog事件流.很自然,这个程序在第一次运行的时候,其事务GTIDSe ...
- windows中的一个小bug
无意中发现的windows的一个小bug,同时按下"ctrl"键和"alt"键时,过一秒钟左右cpu占用就会达到100%,在两台机器试验了一下都这样.因为也不是 ...
- 在Blender中做一个小独角兽
自我介绍 我叫劳拉·梅卡达尔(Laura Mercadal),现居法国.我是自由职业3D艺术家,和广告或动画工作室合作,主要从事建模,着色器和照明的工作. 我在法国里昂的Emile Cohl学校学习了 ...
最新文章
- 毕业设计:基于SSM实现新生报道系统
- leetcode算法题--扑克牌中的顺子
- 有用就存档,没用就删除,当日清理当日的email
- AS编写sdk并打成jar包供其它APP调用
- 编写程序在窗口中写出自己名字的拼音缩写_各类英文缩写:全称居然这么朴素?网友:最后一个我笑了...
- Shiro————会话管理
- Java中BufferedReader和scanner的对比
- 数据结构与算法学习笔记
- 【Unity】添加 Device Simulator功能
- PHP解决抢购、秒杀、抢楼、抽奖等阻塞式高并发库存防控超量的思路方法
- php阿拉伯数字转中文人民币大写
- 前道道指令、后道道指令暨先天八卦指令、后天八卦指令
- web页面性能优化及SEO优化
- 华为鸿蒙即兴评述,华为的理性,鸿蒙的节奏
- 基于Java+SpringBoot+Vue+uniapp前后端分离图书阅读系统设计与实现
- 带孩子看的100部BBC经典纪录片
- 微信文章抓取:微信临时链接转永久链接方法,一招摆脱链接过期烦恼
- php网站后台开发教程,WordPress做网站后台开发教程
- 【React】React Js入门教程(一学就会)
- 公共信息模型(CIM)
热门文章
- 【JAVA】美团面试七连问
- numpy.meshgrid(),ravel(),contourf(),scater()理解
- 英特尔® 高级矢量扩展(AVX)指令集简介
- VOA慢速英语练听力需坚持
- 字符串文本匹配神器———Java正则表达式
- “which” 和 “,which”的区别
- hdu 4699 Editor(Splay)
- 大浪淘尽,未来IT界只需三种英才
- 检测LED单元板的好坏的常见方法
- dokuwiki mysql_Dokuwiki