博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java-collection的 iterator 返回的迭代器快速失败
阅读量:6962 次
发布时间:2019-06-27

本文共 1636 字,大约阅读时间需要 5 分钟。

import java.util.HashMap;  import java.util.Iterator;  import java.util.Map;  import java.util.Set;  import java.util.TreeMap;  public class TreeMapTest {
public static void main(String[] args) { Map
map=new TreeMap
(); map.put("tom", new Person(16)); map.put("jim", new Person(17)); map.put("zose", new Person(18)); for(Map.Entry
entry:map.entrySet()){ if(entry.getKey().equals("tom")){ map.remove("tom"); System.out.println("find tom"); } else{ System.out.println(entry.getValue().getAge()); } } System.out.println(map.size()); } } class Person{ int age; public Person(int age){ this.age=age; } public int getAge(){ return age; } }

collection(由此类所有的“collection 视图方法”返回)的 iterator 方法返回的迭代器都是快速失败 的:在迭代器创建之后,如果从结构上对映射进行修改,除非通过迭代器自身的 remove 方法,否则在其他任何时间以任何方式进行修改都将导致迭代器抛出 ConcurrentModificationException。因此调用map.remove(“tom”),进入下次循环后,直接抛出ConcurrentModificationException异常,正确答案是:

17find tomConcurrentModificationException

同时,如果要在TreeMap中删除元素,应该采用迭代器的方式

Set
set=map.keySet(); Iterator
it=set.iterator(); while(it.hasNext()){ String key=it.next(); if(key.equals("tom")){ it.remove(); System.out.println("find tom"); } else { System.out.println(map.get(key).getAge()); } }

转载地址:http://nnzsl.baihongyu.com/

你可能感兴趣的文章
Laravel 第三方登陆之 Socialite Providers
查看>>
Ubuntu14.10 remove ibus 之后
查看>>
Spring第一天
查看>>
springMVC笔记系列(20)——控制器实现详解(下)
查看>>
Linux文件上传下载,rz和sz
查看>>
在as3中使用嵌入字体
查看>>
How processor, assembler, and programming langu...
查看>>
五种方法解决Magento中jQuery和Prototype兼容性
查看>>
PPT模板网站
查看>>
InSave 隐私政策
查看>>
[Linux command]批处理注释
查看>>
delphi 操作文件时间的函数
查看>>
nodjs 生产环境及升级问题
查看>>
JS判断客户端是否是iOS或者Android手机移动端
查看>>
Swing控件
查看>>
快速JavaEE轻量级框架&公用业务模块 设计&实现 6.1 - DAO测试
查看>>
文本特征提取算法实现
查看>>
这个qq的域名【c.gj.qq.com】是做什么的?chrome浏览器,访问什么网站都有这个请求...
查看>>
C++中的类型转换
查看>>
大数据引发的变革与企业面临的挑战
查看>>