ss1 = new HashSet<>(m1.keySet());"和 "Set ss2 = m1.keySet();"之间有什么区别吗-6ren"> ss1 = new HashSet<>(m1.keySet());"和 "Set ss2 = m1.keySet();"之间有什么区别吗-我正在学习 Java Map 接口(interface),并希望从 Map 的键值创建一个 Set 。我想出了两个版本的代码,它们对我来说似乎完全相同。我只是想知道它们之间是否有任何实际区别以及我什么-6ren">
gpt4 book ai didi

java - "Set ss1 = new HashSet<>(m1.keySet());"和 "Set ss2 = m1.keySet();"之间有什么区别吗

转载 作者:行者123 更新时间:2023-11-30 07:31:32 27 4
gpt4 key购买 nike

我正在学习 Java Map 接口(interface),并希望从 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();

最佳答案

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

ss1m1 独立存在,您可以在其中自由添加和删除元素,而不会影响 m1,尽管它也会产生 O (n) 进行复制的开销。

关于java - "Set<String> ss1 = new HashSet<>(m1.keySet());"和 "Set<String> ss2 = m1.keySet();"之间有什么区别吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36050366/

27 4 0