“Set <string> ss1 = new HashSet&lt;&gt;(m1.keySet());”之间有什么区别吗?“和“Set <string> ss2 = m1.keySet();”

时间:2016-03-17 02:02:38

标签: java dictionary collections set

我正在学习Java Map界面,并希望从Map的键值创建Set。我想出了两个版本的代码,它们对我来说似乎完全一样。我只是想知道它们之间是否存在任何实际差异,何时应该使用一个版本而不是另一个版本?在此先感谢您的帮助。

    Map<String, Integer> m1 = new LinkedHashMap<>();
    m1.put("one", 1);
    m1.put("two", 2);
    m1.put("three", 3);

    //Version 1
    Set<String> ss1 = new HashSet<>(m1.keySet());

    //version 2
    Set<String> ss2 = m1.keySet();

1 个答案:

答案 0 :(得分:1)

是的,有区别。 ss2无法添加元素,但如果您从ss2删除元素,则相应地会从地图中删除这些元素。

ss1具有m1的独立存在,您可以在不影响m1的情况下自由添加和删除元素,但它也会产生O(n)开销来进行复制。