gpt4 book ai didi

java - 为什么 HashSet 的内部实现会创建虚拟对象以作为值插入 HashMap 而不是插入空值?

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:48 25 4
gpt4 key购买 nike

HashSet 是使用 HashMap 实现的,当我们向 HashSet 添加任何东西,例如 e1 时,如果集合中不存在 e1,它会在内部向 HashMap 添加 (e1,new Object())。我的问题是为什么他们要插入 new Object(),而他们本可以像 (e1,null) 那样插入,这是更优化的方法,因为没有创建新的对象。在这里插入空值有什么缺点吗?

最佳答案

HashSet 不会在每次将新键放入 到映射中时添加新的Object。它确实使用了一个Object,但它每次都使用相同的Object。此值在 HashSet 源代码中被命名为 PRESENT

add 方法调用内部 HashMap 上的 put(key, PRESENT)remove 方法调用内部 HashMap 上的 remove(key),但它必须返回一个 boolean 来指示是否 key 在场。如果null作为值存储,那么HashSet需要先调用containsKey,然后调用remove,确定 key 是否存在——额外的开销。这里,只有一个Object的内存开销,非常小。

关于java - 为什么 HashSet 的内部实现会创建虚拟对象以作为值插入 HashMap 而不是插入空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30037694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com