为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 PRESENT 是 HashSet 中 add 方法中 map.put(e,PRESENT)

为什么 PRESENT 是 HashSet 中 add 方法中 map.put(e,PRESENT)

蝴蝶刀刀 2023-03-09 14:22:49
当我们打电话HashSet set = new HashSet(); set.add(1);该add方法将在内部调用put带有 value 的 map 方法 map.put(1,PRESENT);。为什么PRESENT在中作为虚拟值传递map.put?
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

从概念上讲,Map 代表 Set 的超集:它包含 Set 的所有键。

因此,很可能通过重新使用 Map 来实现 Set。但是 Map 当然需要一个键加上一个值。

因此:当您决定通过重新使用 Map 来实现 Set 时,向 set 添加一个键会导致向该 map 添加一个键和一个虚拟值。使用非空值很有用,这样您可以稍后决定删除特定键是否真的删除了任何内容。


查看完整回答
反对 回复 2023-03-09
?
哔哔one

TA贡献1854条经验 获得超8个赞

如果您检查 a 的实例化HashSet

public HashSet() {
        map = new HashMap<>();
    }

它表示为 a hashmap,您添加到集合中的值被添加keys到具有虚拟对象值的映射中,这就是HashSet避免重复的方法


查看完整回答
反对 回复 2023-03-09
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

因为在 的实现中HashSet,aMap用于记住集合包含哪些值。或者,换句话说,存在哪个

因此,为了存储的值,每个值都作为键Set放入。Map由于键后面的值无关紧要,因此使用了一个虚拟值。为了最小化内存占用,该虚拟值非常简单且很小:

private static final Object PRESENT = new Object(); //from HashSet's sourcecode


查看完整回答
反对 回复 2023-03-09
  • 3 回答
  • 0 关注
  • 248 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号