為什么HashSet里value不是null?


今天朋友去面試,面試官問到HashSet的源碼.大家都知道HashSet底層是用HashMap實現的.

問到map存的是什么的時候,面試官說應該存的是null,我朋友說是一個對象.

我朋友說我記得源碼是這樣寫的,面試官說,用null效率高啊.

然后他們討論了十分鍾...

回去路上,和我說了這個.起先我也不明白為什么不用null呢.

我也清楚記得HashSet的底層的value是一個final的Object對象.

把源碼拉下來,看到HashSet的remove方法時,瞬間明白了.

顯然Set的remove方法應當是

移除一個元素,並且返回是否移除成功的boolean

而HashSet的remove是使用HashMap實現,則是map.remove

而map的移除會返回value,如果底層value都是存null,

顯然將無法分辨是否移除成功.

public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }

結尾,感覺這種問題算是很細節的東西.有時候面試官也會想當然的.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM