前面简单的了解了两个集合,以及这两个集合后,发现大多数操作方法大同小异,完全没有必要把时间浪费在这个方面上。再加上代码量太少,很难对这些类的使用有什么深刻的见解,也不了解之间存取速度存在差异的原理。前辈们说把时间浪费到这个地方上是好高慕远,所以这一篇主要谈谈对于这些集合之间存在的关系的理解(应该说是疑问)。
首先是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算法,为了储存键值,在迭代的时候方便取吗?)。
后边两者明天再讨论...