“黑马程序员”HashSet
来源:互联网 发布:淘宝企业店铺上淘客 编辑:程序博客网 时间:2024/06/16 23:04
数组结构,链表(链接列表)结构,这是List体系中学习到的数据结构。Collection,这个大体系中,还有其它子体系,Set就是它又一个子体系。这个子体系中又会给我们介绍哪些数据结构呢?好了! 不卖关子了,开门见山,直接奉上“干货”!先奉上Set的子类HashSet。Set,是设置的意思!“设置,设置”,你总该拿一个东西,一个规则来设置它吧!用什么来设置它呢?用“Hash”(译为,混杂,散列),用散列(散乱地排列)算法来设置。Hash算法下孕育出来的Hash列表是一个卓越的数据结构。
我们都知道,数组,在内存中是一片连续的存储空间(连续“地址”),所以数组查询速度比较快。链接列表,是非连续的存储空间,在内存中哪都有,用“地址”链接着(链接列表,像一个链子,一环扣一环,每一个“集合”元素记录着上一个“集合”元素的“地址”(每一个“集合”元素都有两个“地址”(除了第一个“集合”元素),一个自己的“地址”,一个是上一个“集合”元素的“地址”))。这样的“因”,决定了这样的“果”:“数组”查询速度比“链接”快。
以上所述,是“hash”还没有出现之前的“世界排名”。在“hash”出现之后,“世界排名”发生了变化,“hash”的查询速度比“数组”还要快,这让我不由想起奥林匹克运动会的口号:更高,更快,更强!也让我想起某一个品牌广告中的一句广告语:没有最好,只有更好!
那为何“hash”的查询速度会比“数组”还要快呢?这就要说到在内存中它对于“数据”的安排!其实,通过这个,可以“一石三鸟”,除了可以解释为何“hash”的查询速度会比“数组”还要快,还可以解释为什么你以什么顺序储存“集合”元素,获取元素的顺序都是一样的。还可以解释为什么它不能存储重复元素。这些疑问,在下面的“图解”中,都会被一一化解.......
到这,通过我呈上的“图解”,就可以理解那些问题了!因为,每一个“位置”和每一个“集合”元素都是绑定,无论以什么顺序添加“集合”元素,都不会改变中由“hash”掌控的决定权。如果存储了重复元素,比如说,先前已存储了“ab”,现在又要存储进来一个“ab”,一计算是“5”,拿着"ab"就上那个位置,发现那个位置上已经有“集合”元素。此刻,如果存储进去,那下次要查找获取这个位置“集合”元素时,就产生了一个不确定性,所以说不允许存储重复元素。至于为何“hash”的查询速度会比“数组”还要快?很简单,不需要从头挨个遍历查找,所以查询速度就快了!
- “黑马程序员”HashSet
- 黑马程序员学习hashset心得
- 黑马程序员_<<Set,HashSet>>
- 黑马程序员----HashCold与HashSet
- 黑马程序员_java基础hashSet
- 黑马程序员-Java之HashSet
- 黑马程序员---HashSet,TreeSet的区别
- 黑马程序员,HashSet:底层数据结构是哈希表
- 黑马程序员--集合之HashSet/TreeSet原理
- 黑马程序员--07.集合框架--06.【HashSet】
- 黑马程序员 HashSet、HashMap,散列表数据结构
- 黑马程序员--【Set】【HashSet】【hashCode方法】
- 黑马程序员-ArrayList与HashSet小知识
- 黑马程序员-HashSet讲解学习日记
- 黑马程序员-Set-HashSet-TreeSet-Comparator-Comparable
- 黑马程序员-------集合框架之HashSet
- 黑马程序员 集合ArrayList、HashSet和TreeSet的使用
- 黑马程序员hashCode()方法和hashset算法集合的关系
- 事件总线 eventbus-3.0.0-beta1.jar 使用
- android 加载webview时,保存并同步cookie实现免登陆
- iOS Xcode7 修改了info.plist 也不能联网问题
- linux下分区、做文件系统、dd生成大文件、fio参数
- 《Effective C++》读书笔记(三)
- “黑马程序员”HashSet
- 安保法案、採決強行―日本の安全に資するのか
- Flask中的模板
- 转 DDX_ MessageBox
- 重学C++Primer笔记2---输入/输出 操作符 左操作数 右操作数 深入理解
- IPMsg飞鸽传书网络协议解析手记
- sun.net.util.ipaddressutil的包没找到?
- DataGridView单击选中整行
- android 图片最省内存压缩方法