为什么HashSet里value不是null?

HashSet与HashMap的底层实现
本文探讨了HashSet和HashMap的底层实现原理,特别是在面试中出现的一个细节问题:HashSet为何不使用null作为value。通过源码分析,解释了HashSet的remove方法如何判断移除操作的成功与否,强调了细节在面试和技术讨论中的重要性。

今天朋友去面试,面试官问到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个

红包金额最低5元

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

抵扣说明:

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

余额充值