我正在学习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();
答案 0 :(得分:1)
是的,有区别。 ss2
无法添加元素,但如果您从ss2
删除元素,则相应地会从地图中删除这些元素。
ss1
具有m1
的独立存在,您可以在不影响m1
的情况下自由添加和删除元素,但它也会产生O(n)开销来进行复制。