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

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

找到這個(gè)問(wèn)題答案最簡(jiǎn)單的方法,就是看一下源碼,也順便了解一下HashSet其他方面的知識(shí)。

打開(kāi)HashSet的源碼,可以看到:

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

privatestaticfinalObjectPRESENT=newObject();

map=newHashMap<>();

因?yàn)榈讓訉?shí)現(xiàn)是HashMap,這也就理解了為什么HashSet不允許重復(fù)。

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

privatestaticfinalObjectPRESENT=newObject();

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

最后,我們?cè)趓emove方法里面,可以找到我們需要的答案:

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

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

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

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