最近写代码竟然烦了一个很低级的错误,写出来供大家参考:
在涉及到map或者list删除的时候,我们经常写出如下错误代码:
LinkedHashMap<String,String> lhm=new LinkedHashMap<String,String>();
lhm.put("a","a");
lhm.put("b","b");
lhm.put("c","c");
lhm.put("d","d");
Iterator<String> it=lhm.keySet().iterator();
while(it.hasNext())
{
String str=it.next();
if("a".equals(str))
lhm.remove(str);
}
结果编译器报错Exception in thread "main" java.util.ConcurrentModificationException
正确代码如下:
LinkedHashMap<String,String> lhm=new LinkedHashMap<String,String>();
lhm.put("a","a");
lhm.put("b","b");
lhm.put("c","c");
lhm.put("d","d");
Iterator<String> it=lhm.keySet().iterator();
while(it.hasNext())
{
String str=it.next();
if("a".equals(str))
it.remove(str);
}
仅仅相差一个it.remove(str),你是不是也经常马虎呢?
其实,Iterator可以理解为一个索引,他依靠在其所要迭代的集合上,一旦使用lhm.remove,就会使原来的集合结构遭到破坏,此时原来的集合与iterator的索引结构不一致,自然iterator就会报错。而用iteraotr.remove(),iterator会自动的维护被迭代集合的索引一致性,因此能够正常运行。
分享到:
相关推荐
Exception in thread “main“ java.util.InputMismatchException
java.util.ConcurrentModificationException 异常问题详解1
java.util.ConcurrentModificationException 解决方法 在使用iterator.hasNext()操作迭代器的时候,如果此时迭代的对象发生改变,比如插入了新数据,或者有数据被删除。 则使用会报以下异常: Java.util....
本文通过对数据压缩算法的简要介绍,然后以详细的示例演示了利用java.util.zip包实现数据的压缩与解压,并扩展到在网络传输方面如何应用java.util.zip包现数据压缩与解压
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
详细介绍了java.util.logging.Logger的用法和结构,对如果扩展Logger起到抛砖引玉的作用!尊重劳动成果,亲下载了要给个评价!
Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError),内附解决方案!
主要介绍了出现java.util.ConcurrentModificationException 问题及解决办法的相关资料,需要的朋友可以参考下
java.util.Date与java.sql.Date互转及字符串转换为日期时间格式.docx
java.util.concurrent系列文章(1) java.util.concurrent系列文章(1) java.util.concurrent系列文章(1) java.util.concurrent系列文章(1)
java并发工具包 java.util.concurrent中文版-带书签版
详细介绍java.util.Date和java.sql.Date相互转换的多种方法总结,希望对大家有帮助
这是我在编写struts2中遇到的问题,整理出来,包括截图,希望可以帮到大家
java.util包
世界范围内的时区列表。由 java.util.TimeZone 类导出
java.util包源码,pdf版,方便打印
java.util.pdf
使用java.util.timer实现的简单定时任务,在实现简单一次性定时任务时,使用java.util.timer非常的简单易用,适合没有接触过quartz的新手急用。
java.util包总结,方便大家学习。请多指教。