当使用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中的一个小问题相关推荐

  1. python 子图_python 实现在一张图中绘制一个小的子图方法

    有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib. ...

  2. python画50个图-python 实现在一张图中绘制一个小的子图方法

    有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib. ...

  3. python画简便的图-python 实现在一张图中绘制一个小的子图方法

    有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib. ...

  4. React学习中的一个小实战(智能社)

    最近在学习React,跟着前端blue大神学习基础,这是课程中的一个小案例,因为不会,希望写博客来加强记忆. 此案例是用React来实现豆瓣电影的前后端数据交互. 首先来看一下改之前的源码. 博客会附 ...

  5. python一张图-python 实现在一张图中绘制一个小的子图方法

    有时候为了直观展现图的信息,可以在大图中添加小子图的方式进行数据分析,如下图所示: 具体的代码如下:该图连接了数据库,当然重要的不是数据展示,而是添加子图的方法. import matplotlib. ...

  6. 随笔:web服务器中建立一个小的个人站点

    1.侃侃而谈:在web服务器中,一般我们会使用http协议,http协议基于80端口,它属于明文协议,所以会带来安全隐患.所以当我们访问一些交易网站的时侯,会使用https协议,这是一个加密协议,它会 ...

  7. mysql内核测试,MySQL 5.7内核复制中的一个小坑

    问题背景 最近在写一个作为MySQL Slave的角色的程序,连接到MySQL Master使用MySQL复制协议来Dump Binlog事件流.很自然,这个程序在第一次运行的时候,其事务GTIDSe ...

  8. windows中的一个小bug

    无意中发现的windows的一个小bug,同时按下"ctrl"键和"alt"键时,过一秒钟左右cpu占用就会达到100%,在两台机器试验了一下都这样.因为也不是 ...

  9. 在Blender中做一个小独角兽

    自我介绍 我叫劳拉·梅卡达尔(Laura Mercadal),现居法国.我是自由职业3D艺术家,和广告或动画工作室合作,主要从事建模,着色器和照明的工作. 我在法国里昂的Emile Cohl学校学习了 ...

最新文章

  1. 毕业设计:基于SSM实现新生报道系统
  2. leetcode算法题--扑克牌中的顺子
  3. 有用就存档,没用就删除,当日清理当日的email
  4. AS编写sdk并打成jar包供其它APP调用
  5. 编写程序在窗口中写出自己名字的拼音缩写_各类英文缩写:全称居然这么朴素?网友:最后一个我笑了...
  6. Shiro————会话管理
  7. Java中BufferedReader和scanner的对比
  8. 数据结构与算法学习笔记
  9. 【Unity】添加 Device Simulator功能
  10. PHP解决抢购、秒杀、抢楼、抽奖等阻塞式高并发库存防控超量的思路方法
  11. php阿拉伯数字转中文人民币大写
  12. 前道道指令、后道道指令暨先天八卦指令、后天八卦指令
  13. web页面性能优化及SEO优化
  14. 华为鸿蒙即兴评述,华为的理性,鸿蒙的节奏
  15. 基于Java+SpringBoot+Vue+uniapp前后端分离图书阅读系统设计与实现
  16. 带孩子看的100部BBC经典纪录片
  17. 微信文章抓取:微信临时链接转永久链接方法,一招摆脱链接过期烦恼
  18. php网站后台开发教程,WordPress做网站后台开发教程
  19. 【React】React Js入门教程(一学就会)
  20. 公共信息模型(CIM)

热门文章

  1. 【JAVA】美团面试七连问
  2. numpy.meshgrid(),ravel(),contourf(),scater()理解
  3. 英特尔® 高级矢量扩展(AVX)指令集简介
  4. VOA慢速英语练听力需坚持
  5. 字符串文本匹配神器———Java正则表达式
  6. “which” 和 “,which”的区别
  7. hdu 4699 Editor(Splay)
  8. 大浪淘尽,未来IT界只需三种英才
  9. 检测LED单元板的好坏的常见方法
  10. dokuwiki mysql_Dokuwiki