欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

Java中HashSet的Value為什么存PRESENT而不是Null

錢衛(wèi)國2年前39瀏覽0評論

Java中HashSet的Value為什么存PRESENT而不是Null?

找到這個問題答案最簡單的方法,就是看一下源碼,也順便了解一下HashSet其他方面的知識。

打開HashSet的源碼,可以看到:

首先可以看到,HashSet的底層實現(xiàn),是基于HashMap的。

private static final Object PRESENT = new Object();map = new HashMap<>();

因為底層實現(xiàn)是HashMap,這也就理解了為什么HashSet不允許重復(fù)。

另外,很容易就發(fā)現(xiàn)我們需要找的內(nèi)容:PRESENT

private static final Object PRESENT = new Object();

先看add()方法,可以發(fā)現(xiàn)插入到HashMap里面的value是一個final的Object對象,而不是Null:

最后,我們在remove方法里面,可以找到我們需要的答案:

由于HashSet的Remove實質(zhì)就是HashMap的Remove,所以在看下HashMap的源碼:

想象一下,如果HashSet中底層的value存null的話,那么當(dāng)map.remove(o)==null的時候,是沒有辦法知道這個null究竟代表了什么。

希望我的回答,能夠幫助到你!

我會持續(xù)分享Java程序開發(fā)、架構(gòu)設(shè)計、職業(yè)發(fā)展等方面的知識和見解,希望能得到你的關(guān)注今日頭條【會點代碼的大叔】,轉(zhuǎn)載請注明出處。