一、遍历map的四种方式:
1、使用迭代器:
Map map = new HashMap();
map.put("name","xiaoming");
map.put("age","20");
map.put("sex","male");
Iterator> 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 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 map = new HashMap();
map.put("name","xiaoming");
map.put("age","20");
map.put("sex","male");
for(Map.Entry 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 map = new HashMap();
map.put("name","xiaoming");
map.put("age","20");
map.put("sex","male");
Iterator> iterator = map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry m = iterator.next();
if(m.getKey().equals("age")){
System.out.println("将要删除键为:"+m.getKey()+"的元素");
iterator.remove();
}
}
System.out.println("删除后结果为:");
for(Map.Entry m : map.entrySet()){
System.out.println(m.getKey()+"="+m.getValue());
}
2、使用线程安全的 ConcurrentHashMap类:
Map map = new ConcurrentHashMap();
map.put("name","xiaoming");
map.put("age","20");
map.put("sex","male");
for(Map.Entry m : map.entrySet()){
if(m.getKey().equals("age")){
map.remove(m.getKey());
}
}
System.out.println("删除后结果为:");
for(Map.Entry m : map.entrySet()){
System.out.println(m.getKey()+"="+m.getValue());
}