今天朋友去面試,面試官問到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; }
結尾,感覺這種問題算是很細節的東西.有時候面試官也會想當然的.