“黑马程序员”HashSet

来源:互联网 发布:淘宝企业店铺上淘客 编辑:程序博客网 时间:2024/06/16 23:04
------- android培训、java培训、期待与您交流! ----------

  数组结构,链表(链接列表)结构,这是List体系中学习到的数据结构。Collection,这个大体系中,还有其它子体系,Set就是它又一个子体系。这个子体系中又会给我们介绍哪些数据结构呢?好了! 不卖关子了,开门见山,直接奉上“干货”!先奉上Set的子类HashSetSet,是设置的意思!“设置,设置”,你总该拿一个东西,一个规则来设置它吧!用什么来设置它呢?用“Hash”(译为,混杂,散列),用散列(散乱地排列)算法来设置。Hash算法下孕育出来的Hash列表是一个卓越的数据结构。

  我们都知道,数组,在内存中是一片连续的存储空间(连续“地址”),所以数组查询速度比较快。链接列表,是非连续的存储空间,在内存中哪都有,用“地址”链接着(链接列表,像一个链子,一环扣一环,每一个“集合”元素记录着上一个“集合”元素的“地址”(每一个“集合”元素都有两个“地址”(除了第一个“集合”元素),一个自己的“地址”,一个是上一个“集合”元素的“地址”))。这样的“因”,决定了这样的“果”:“数组”查询速度比“链接”快。

  以上所述,是“hash”还没有出现之前的“世界排名”。在“hash”出现之后,“世界排名”发生了变化,“hash”的查询速度比“数组”还要快,这让我不由想起奥林匹克运动会的口号:更高,更快,更强!也让我想起某一个品牌广告中的一句广告语:没有最好,只有更好!

  那为何“hash”的查询速度会比“数组”还要快呢?这就要说到在内存中它对于“数据”的安排!其实,通过这个,可以“一石三鸟”,除了可以解释为何“hash”的查询速度会比“数组”还要快,还可以解释为什么你以什么顺序储存“集合”元素,获取元素的顺序都是一样的。还可以解释为什么它不能存储重复元素。这些疑问,在下面的“图解”中,都会被一一化解.......

 

 

  到这,通过我呈上的“图解”,就可以理解那些问题了!因为,每一个“位置”和每一个“集合”元素都是绑定,无论以什么顺序添加“集合”元素,都不会改变中由“hash掌控的决定权。如果存储了重复元素,比如说,先前已存储了“ab”,现在又要存储进来一个“ab,一计算是“5”,拿着"ab"就上那个位置,发现那个位置上已经有“集合”元素。此刻,如果存储进去,那下次要查找获取这个位置“集合”元素时,就产生了一个不确定性,所以说不允许存储重复元素。至于为何“hash”的查询速度会比“数组”还要快?很简单,不需要从头挨个遍历查找,所以查询速度就快了!

0 0
原创粉丝点击