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)載請注明出處。