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

当我们打电话

HashSet set = new HashSet();
set.add(1);

add方法将在内部调用put带有 value 的 map 方法 map.put(1,PRESENT);

为什么PRESENT在中作为虚拟值传递map.put


蝴蝶刀刀
浏览 252回答 3
3回答

森栏

从概念上讲,Map 代表 Set 的超集:它包含 Set 的所有键。因此,很可能通过重新使用 Map 来实现 Set。但是 Map 当然需要一个键加上一个值。因此:当您决定通过重新使用 Map 来实现 Set 时,向 set 添加一个键会导致向该 map 添加一个键和一个虚拟值。使用非空值很有用,这样您可以稍后决定删除特定键是否真的删除了任何内容。

哔哔one

如果您检查 a 的实例化HashSet:public&nbsp;HashSet()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map&nbsp;=&nbsp;new&nbsp;HashMap<>(); &nbsp;&nbsp;&nbsp;&nbsp;}它表示为 a&nbsp;hashmap,您添加到集合中的值被添加keys到具有虚拟对象值的映射中,这就是HashSet避免重复的方法

泛舟湖上清波郎朗

因为在 的实现中HashSet,aMap用于记住集合包含哪些值。或者,换句话说,存在哪个值。因此,为了存储的值,每个值都作为键Set放入。Map由于键后面的值无关紧要,因此使用了一个虚拟值。为了最小化内存占用,该虚拟值非常简单且很小:private&nbsp;static&nbsp;final&nbsp;Object&nbsp;PRESENT&nbsp;=&nbsp;new&nbsp;Object();&nbsp;//from&nbsp;HashSet's&nbsp;sourcecode
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java