JAVA 关于HashSet源码实现学习记录

序言:

        之前学习到HashSet,在学习中了解到HashSet是使用HashMap实现,我对它的实现比较感兴趣,于是特地查看了HashSet的实现源码。

HashSet的部分源码分析:

 

   

 根据第一段源码可以看出HashSet的确使用了HashMap。

根据第二段源码可以看出,add方法将要存储的值当作HashMap的““”存储到了HashMap中,而map中存储的值是PRESENT,查看源码后发现PRESENT是一个Object对象。

总结:

在HashSet中将元素作为HashMap的键存储在HashMap中,因为HashMap中的键是唯一的,因此保证了HashSet中的元素的唯一性。

疑惑:

从HashSet的源码中可以看出,我们只需要存储一个键值,但是我们却额外存储了一个Object对象,这样每次额外存储一个Object对象岂不浪费存储空间,为什么不直接使用null。

HashMap的部分源码分析

 

从上述的源码可以得出map.put()返回的存储的值,意味着如果存入的键已存在则返回的是null,如果使用null作为存储时的值,那么不管存储成功与否都会返回null,就不能判断存储是否成功。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值