當我們打電話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 添加一個鍵和一個虛擬值。使用非空值很有用,這樣您可以稍后決定刪除特定鍵是否真的刪除了任何內容。

嗶嗶one
TA貢獻1854條經驗 獲得超8個贊
如果您檢查 a 的實例化HashSet
:
public HashSet() { map = new HashMap<>(); }
它表示為 a hashmap
,您添加到集合中的值被添加keys
到具有虛擬對象值的映射中,這就是HashSet
避免重復的方法

泛舟湖上清波郎朗
TA貢獻1818條經驗 獲得超3個贊
因為在 的實現中HashSet
,aMap
用于記住集合包含哪些值?;蛘撸瑩Q句話說,存在哪個值。
因此,為了存儲的值,每個值都作為鍵Set
放入。Map
由于鍵后面的值無關緊要,因此使用了一個虛擬值。為了最小化內存占用,該虛擬值非常簡單且很?。?/p>
private static final Object PRESENT = new Object(); //from HashSet's sourcecode
添加回答
舉報
0/150
提交
取消