读书人

Set跟HashMap

发布时间: 2012-09-14 11:53:44 作者: rapoo

Set和HashMap

?

发现 Set和HashMap之间还是有很多需要注意的地方:?

HashMap<String,String> map = new HashMap<String,String>();
map.put("1", "aa");
map.put("2", "bb");
map.put("3", "aa");
?
Set<String> set = map.keySet();

1. ?map的keySet()方法只返回一个set实例,所以当从key1中删除一个对象时候,其他也将会受到影响。

2. ?针对于 set不能进行 add操作 ,否则会报“java.lang.UnsupportedOperationException” 。原因 如下 :?

? ? public Set<K> keySet()返回此映射中所包含的键的 set 视图。该集合受映射的支持,所以映射的变化也反映在该集合中,反之亦然。该集合支持元素的移除,通过 ? ? ? ? ?Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作,从该映射中移除相应的映射关系。它不支持 add 或 addAll 操作。

3.?

? Set<String> set= map.keySet();

? for (String key : set) {

????? map.remove(key);

? }

此代码 报这个异常:?Exception in thread "main" java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$KeyIterator.next(Unknown Source)
at com.nan.an.jing.TestSet.main(TestSet.java:23)

原因 为 : ?因为删除了一个Entry之后,因为ketSet不正确,在for循环时出的问题。


改正的方法为:

?

?String[] keySet = map.keySet().toArray(new String[0]);

? for (String key : keySet) {

????? map.remove(key);

? }

或者?

?Object[] keySet = map.keySet().toArray();
?for (Object key : keySet) {
? ? ?map.remove((String)key);
?}


附注 : 代码实例?

?

}??
  • } ?

    http://www.360doc.com/relevant/117933138_more.shtml

    转载自:http://blog.csdn.net/qingchun1987_303/article/details/7243973

  • 读书人网 >编程

    热点推荐