Sam*_*msh 2 java collections map
如何使用addAll() - Java将映射条目从同步映射添加到同步/非同步映射?
Map<String,String> h = Collections.synchronizedMap(new HashMap<String,String>());
Map<String,String> g = Collections.synchronizedMap(new HashMap<String,String>());
// or even better - Map<String,String> = new HashMap<String,String>();
h.put("kkk","eee");
Set<Map.Entry<String,String>> s = h.entrySet();
Set<Map.Entry<String,String>> ss = g.entrySet();
ss.addAll(s); //causes unsupportedoperationexception for both the synchronized version
// of map g and the unsynchronized, even if this operation is placed
// in a synchronized block (synchronized(h){}, and synchronized(g){})
Run Code Online (Sandbox Code Playgroud)
HashMap
的EntrySet
不支持addAll
,句号.同步与它无关.要复制从h到g的所有内容g.putAll(h);
.
该方法equals()
是指定Map.Entry<K,V>
手段add
和addAll
操作不会对正常的entrySet行为.Map.Entry表示如果Key和Value都匹配,则两个条目相等.所以你应该能够将["Foo","Baz"]添加到已经包含["Foo","Bar"]的entrySet中,因为根据它们它们不一样equals
.当然我们知道这是不可能的,entrySet不能包含这两者,Foo的新映射必须替换旧的映射.所以这些方法根本不受支持.
归档时间: |
|
查看次数: |
324 次 |
最近记录: |