计算Java中两个HashMaps的keySet的并集

B M*_*B M 2 java hashmap set

我想计算两个哈希映射的键的并集.我写了下面的代码(MWE如下),但我

获取UnsupportedOperationException.实现这一目标会有什么好处?

import java.util.HashMap;
import java.util.Map;
import java.util.Set;


public class AddAll {

    public static void main(String args[]){

        Map<String, Integer> first = new HashMap<String, Integer>();
        Map<String, Integer> second = new HashMap<String, Integer>();

        first.put("First", 1);
        second.put("Second", 2);

        Set<String> one = first.keySet();
        Set<String> two = second.keySet();

        Set<String> union = one;
        union.addAll(two);

        System.out.println(union);


    }


}
Run Code Online (Sandbox Code Playgroud)

Lou*_*man 7

那么,union是不是复制one,它 one.这 first.keySet().并且first.keySet()不是密钥的副本first,它是一个视图,并且不支持添加,如中所述Map.keySet().

所以你需要实际复制一份.最简单的方法就是写

 one = new HashSet<String>(first);
Run Code Online (Sandbox Code Playgroud)

它使用"复制构造函数" HashSet来进行实际复制,而不是仅仅引用同一个对象.