亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 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用于記住集合包含哪些值?;蛘撸瑩Q句話說,存在哪個

因此,為了存儲的值,每個值都作為鍵Set放入。Map由于鍵后面的值無關緊要,因此使用了一個虛擬值。為了最小化內存占用,該虛擬值非常簡單且很?。?/p>

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


查看完整回答
反對 回復 2023-03-09
  • 3 回答
  • 0 關注
  • 233 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號