今天朋友去面試,面試官問到HashSet的源碼.你們都知道HashSet底層是用HashMap實現的.面試
問到map存的是什麼的時候,面試官說應該存的是null,我朋友說是一個對象.spa
我朋友說我記得源碼是這樣寫的,面試官說,用null效率高啊.code
而後他們討論了十分鐘...對象
回去路上,和我說了這個.起先我也不明白爲何不用null呢.blog
我也清楚記得HashSet的底層的value是一個final的Object對象.rem
把源碼拉下來,看到HashSet的remove方法時,瞬間明白了.源碼
顯然Set的remove方法應當是class
移除一個元素,而且返回是否移除成功的boolean
而HashSet的remove是使用HashMap實現,則是map.remove效率
而map的移除會返回value,若是底層value都是存null,map
顯然將沒法分辨是否移除成功.
public boolean remove(Object o) { return map.remove(o)==PRESENT; }
結尾,感受這種問題算是很細節的東西.有時候面試官也會想固然的.