java集合框架学习第二记 之前两个集合以及LinkedHashSet和LinkedHashMap

前面简单的了解了两个集合,以及这两个集合后,发现大多数操作方法大同小异,完全没有必要把时间浪费在这个方面上。再加上代码量太少,很难对这些类的使用有什么深刻的见解,也不了解之间存取速度存在差异的原理。前辈们说把时间浪费到这个地方上是好高慕远,所以这一篇主要谈谈对于这些集合之间存在的关系的理解(应该说是疑问)。

首先是HashSet,在网上查阅大佬的博客和文章了解到,他是依赖于HashMap实现的,使用Hash算法储存集合的元素,实现方式为通过一个HashMap储存元素,元素存放在HashMap的Key中,Value统一使用一个Object对象。看到这里我是很迷的。

一、使用Hash算法储存元素是不是意味着HashMap的实现就是用这个算法呢?

二、元素存放在Key中?元素指的是啥,难道不是需要存的数据吗?

打开代码懵逼的找了一会以后发现(先打开HashSet的代码),HashSet直接在类里边把元素存到HashMap里了(使用了map.put(e,PRESENT)),而且存的位置是Key!在HashMap里的Value的位置被PRESENT占了!也就是说HashSet直接在键里存值了是吧......(=´▽`)ゞ  

也知道了确实用了hash算法来算出该键的hashcode值。如果取的时候是通过把计算来得到hashcode来得到储存的值的话,难怪比HashMap慢(不过我不知道为什么它还用得到hash算法,为了储存键值,在迭代的时候方便取吗?)。

后边两者明天再讨论...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值