Phinehasz Zhi

超越你看到的

为什么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;
    }

结尾,感觉这种问题算是很细节的东西.有时候面试官也会想当然的.

posted @ 2018-09-28 20:34  phinehasz  阅读(3391)  评论(0编辑  收藏  举报