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

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

转载于:https://www.cnblogs.com/zhhiyp/p/9720739.html

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值