遍历map出现错误java.util.ConcurrentModificationException
2016-08-05 00:00
483 查看
一、遍历map的四种方式:
1、使用迭代器:
2、for循环遍历键,通过键得到值
3、for循环遍历,得到键值
4、for循环遍历 值,无法得到键
二、map删除指定元素的问题
想要删除map中的键为"age"的元素,试图这样做:
报错:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:894)
at java.util.HashMap$EntryIterator.next(HashMap.java:934)
at java.util.HashMap$EntryIterator.next(HashMap.java:932)
at cn.java.test.map.MapTest.main(MapTest.java:22)
原因是:HashMap是线程不安全的。
两种方法解决:
1、使用迭代器的remove方法:
2、使用线程安全的 ConcurrentHashMap类:
1、使用迭代器:
Map<String,String> map = new HashMap<String,String>(); map.put("name","xiaoming"); map.put("age","20"); map.put("sex","male"); Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); }
2、for循环遍历键,通过键得到值
for(String k : map.keySet()){ System.out.println(k+":"+map.get(k)); }
3、for循环遍历,得到键值
for(Map.Entry<String,String> m : map.entrySet()){ System.out.println(m.getKey()+":"+m.getValue()); }
4、for循环遍历 值,无法得到键
for(String v : map.values()){ System.out.println(v); }
二、map删除指定元素的问题
想要删除map中的键为"age"的元素,试图这样做:
Map<String,String> map = new HashMap<String,String>(); map.put("name","xiaoming"); map.put("age","20"); map.put("sex","male"); for(Map.Entry<String,String> m : map.entrySet()){ if(m.getKey().equals("age")){ map.remove(m.getKey()); } }
报错:
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:894)
at java.util.HashMap$EntryIterator.next(HashMap.java:934)
at java.util.HashMap$EntryIterator.next(HashMap.java:932)
at cn.java.test.map.MapTest.main(MapTest.java:22)
原因是:HashMap是线程不安全的。
两种方法解决:
1、使用迭代器的remove方法:
Map<String,String> map = new HashMap<String,String>(); map.put("name","xiaoming"); map.put("age","20"); map.put("sex","male"); Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator(); while(iterator.hasNext()){ Map.Entry<String, String> m = iterator.next(); if(m.getKey().equals("age")){ System.out.println("将要删除键为:"+m.getKey()+"的元素"); iterator.remove(); } } System.out.println("删除后结果为:"); for(Map.Entry<String,String> m : map.entrySet()){ System.out.println(m.getKey()+"="+m.getValue()); }
2、使用线程安全的 ConcurrentHashMap类:
Map<String,String> map = new ConcurrentHashMap<String,String>(); map.put("name","xiaoming"); map.put("age","20"); map.put("sex","male"); for(Map.Entry<String,String> m : map.entrySet()){ if(m.getKey().equals("age")){ map.remove(m.getKey()); } } System.out.println("删除后结果为:"); for(Map.Entry<String,String> m : map.entrySet()){ System.out.println(m.getKey()+"="+m.getValue()); }
相关文章推荐
- java.util.ConcurrentModificationException---用迭代器遍历Map时删除其中元素出现异
- 遍历集合时出现的异常Exception in thread "main" java.util.ConcurrentModificationException
- 关于Map表循环过程删除操作出现的java.util.ConcurrentModificationException 异常
- 遍历容器时出现的java.util.ConcurrentModificationException
- 遍历Map时抛出java.util.ConcurrentModificationException异常的解决办法
- 遍历Map时抛出java.util.ConcurrentModificationException异常的解决办法
- 遍历集合时出现的异常Exception in thread "main" java.util.ConcurrentModificationException
- HashMap出现 java.util.ConcurrentModificationException 时的解决办法
- java.util.ConcurrentModificationException错误的解决方法
- java.util.ConcurrentModificationException错误
- java.util.ConcurrentModificationException错误
- Java加锁问题 java.util.ConcurrentModificationException 错误
- java.util.ConcurrentModificationException 出现的原因和解决办法
- 出现 java.util.ConcurrentModificationException 时的解决办法
- java.util.ConcurrentModificationException错误的原因及解决方法
- 出现 java.util.ConcurrentModificationException 时的解决办法
- java.util.ConcurrentModificationException 出现的原因和解决办法
- Collection 或 Map 进行迭代操作抛出 java.util.ConcurrentModificationException 异常
- 出现 java.util.ConcurrentModificationException 时的解决办法
- Map迭代过程中remove引发的java.util.concurrentmodificationexception