本意是想删除记录中value小于 20的记录,且看代码
import java.util.*;public class TestHashMap { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap<String, Integer> staff = new HashMap<String, Integer>();
staff.put("qqq", 22);
staff.put("www", 20);
staff.put("aaa", 15);
staff.put("sss", 12);
System.out.println("Before:");
for ( Map.Entry<String, Integer> e : staff.entrySet()) {
System.out.print(" <" + e.getKey() + "--" + e.getValue() +"> ");
}
System.out.println(); for ( Map.Entry<String, Integer> e : staff.entrySet()) {
String str = e.getKey();
double value = staff.get(str);
if (value < 20) {
staff.remove(str);
}
}
System.out.println("After:");
for ( Map.Entry<String, Integer> e : staff.entrySet()) {
System.out.print(" <" + e.getKey() + "--" + e.getValue() +"> ");
} }}出现如下错误信息:
Before:
<qqq--22> <aaa--15> <sss--12> <www--20>
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$EntryIterator.next(HashMap.java:834)
at java.util.HashMap$EntryIterator.next(HashMap.java:832)
at org.guet.collection.TestHashMap.main(TestHashMap.java:26) 而只删除其中一条记录 如<sss 12> 用staff.remove("sss");确实可以的。 这是为什么? 哪位大侠帮忙解释一下。谢谢!
import java.util.*;public class TestHashMap { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap<String, Integer> staff = new HashMap<String, Integer>();
staff.put("qqq", 22);
staff.put("www", 20);
staff.put("aaa", 15);
staff.put("sss", 12);
System.out.println("Before:");
for ( Map.Entry<String, Integer> e : staff.entrySet()) {
System.out.print(" <" + e.getKey() + "--" + e.getValue() +"> ");
}
System.out.println(); for ( Map.Entry<String, Integer> e : staff.entrySet()) {
String str = e.getKey();
double value = staff.get(str);
if (value < 20) {
staff.remove(str);
}
}
System.out.println("After:");
for ( Map.Entry<String, Integer> e : staff.entrySet()) {
System.out.print(" <" + e.getKey() + "--" + e.getValue() +"> ");
} }}出现如下错误信息:
Before:
<qqq--22> <aaa--15> <sss--12> <www--20>
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793)
at java.util.HashMap$EntryIterator.next(HashMap.java:834)
at java.util.HashMap$EntryIterator.next(HashMap.java:832)
at org.guet.collection.TestHashMap.main(TestHashMap.java:26) 而只删除其中一条记录 如<sss 12> 用staff.remove("sss");确实可以的。 这是为什么? 哪位大侠帮忙解释一下。谢谢!
解决方案 »
- JAVA 如何清空或删除Canvas里的内容
- 在线等 关于 string.format方法
- 有关数据处理与实体类的问题?
- 在htm中如何调用webwork中的action
- 网络硬盘中的问题,帮帮忙啊兄弟们(不好意思,暂时没分了)
- jsp读取sql server时报错,高分请帮助。
- 急!加载JApplet,菜单点击后,菜单项显示不全 contentPane.add(AppletMain,BorderLayout.CENTER);
- 为什么用相对路径总出错?
- 如何判断鼠标点击的坐标,如是否在(50,50)和(80,80)组成的矩形里。高分
- 现在哪种java的开发环境比较受欢迎(vj++??jbuilder??),请推荐几本学习java的好书?
- photoshop
- 如果我想在swing里调用一个ejb
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;public class TestHashMap { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap<String, Integer> staff = new HashMap<String, Integer>();
// Map<String, Integer> staff = new ConcurrentHashMap<String, Integer>();
staff.put("qqq", 22);
staff.put("www", 20);
staff.put("aaa", 2);
staff.put("sss", 2);
System.out.println("Before:");
for ( Map.Entry<String, Integer> e : staff.entrySet()) {
System.out.print(" <" + e.getKey() + "--" + e.getValue() +"> ");
}
System.out.println();
Set<Map.Entry<String,Integer>> entrys = staff.entrySet();
for(Iterator i = entrys.iterator();i.hasNext();) {
Map.Entry entry = (Map.Entry)i.next();
if((Integer)entry.getValue()< 20) {
i.remove();
}
}
/**
* 另外一种方法
* */
/*Set<String> keys=staff.keySet();
List<String> l=new ArrayList<String>();
for(Iterator<String> it=keys.iterator();it.hasNext();){
String key=it.next();
if(staff.get(key)<20){
l.add(key);
}
}
for(String s:l){
staff.remove(s);
}*/
System.out.println("After:");
for ( Map.Entry<String, Integer> e : staff.entrySet()) {
System.out.print(" <" + e.getKey() + "--" + e.getValue() +"> ");
} }}