Sim*_*mon 5 java comparison hashmap
我有两个HashMaps,比如说HashMapA和HashMapB.找到两个HashMaps中存在的密钥的有效方法是什么?我目前的实现如下:
Integer key;
/* create iterator */
Iterator<Map.Entry<Integer, Foo>> it = HashMapA.entrySet().iterator;
/* iterate through HashMapA using iterator*/
while (it.hasNext()) {
key = it.next().getKey();
if (HashMapB.containsKey(key)) {
/* matching key found */
System.out.println("Got one: " + key);
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但看起来安静无效.有没有类似的东西
Integer keyInBothMaps = HashMapA.containsKeyOf(HashMapB);
Run Code Online (Sandbox Code Playgroud)
?
您正在查看地图的键,所以从keySet();开始。
然后就可以看Set界面,看到方法了retainAll
http://docs.oracle.com/javase/8/docs/api/java/util/Set.html#retainAll-java.util.Collection-
这给你:
map1.keySet().retainAll(map2.keySet())
Run Code Online (Sandbox Code Playgroud)
但是,这将修改地图,因此您应该复制该集:
new HashSet<>(map1.keySet()).retainAll(map2.keySet())
Run Code Online (Sandbox Code Playgroud)
您可以使用Set.retainAll。
这是一个丑陋的例子:
Map<String, String> m0 = new HashMap<String, String>();
m0.put("a", "a");
m0.put("b", "b");
Map<String, String> m1 = new HashMap<String, String>();
m1.put("c", "c");
m1.put("b", "b");
Set<String> s = new HashSet<String>(m0.keySet());
s.retainAll(m1.keySet());
System.out.println(s);
Run Code Online (Sandbox Code Playgroud)
输出
[b]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8459 次 |
| 最近记录: |