今天朋友去面试,面试官问到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; }
结尾,感觉这种问题算是很细节的东西.有时候面试官也会想当然的.