摘要
首先说明,以下几类读者请自行对号入座:
- 刚接触编程并对底层原理知之甚少,但又想了解一下数据结构的读者,强烈建议阅读此篇;
- 计算机专业在读,对编程有一定了解,但对数据结构不够熟悉的读者,强烈建议阅读此篇;
- 传统运维想要快速上手自动化,没有精力对底层原理做深入了解的,请跳过此番外篇系列;
- 计算机专业出身并对数据结构有系统了解的读者,请跳过此系列番外篇。
我们在【自动化运维番外篇】数据结构-2 中讲Python中的列表类型与数据结构中的数组进行了详细的讲解和比较,相信大家在操作列表的时候应该都心里更有底了。
这篇我们就来着重讲解一下数据结构中的哈希表与Python中的字典类型,并且告诉大家为什么字典是无序的,顺带破除一下网上大部分博客对于这一知识点的误解。
哈希表(Hash Table)
百度百科:
散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。
它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录。
这加快了查找速度,这个映射函数称做散列函数,存放记录的数组称做散列表。
我觉得一般百度百科对专业名词做出的解释,都让人一脸懵X,本来想搞懂一个知识点,结果它一解释,不懂的知识点更多了。
因为我们完全不知道这个东西的用途,也就无法对其有准确的认知。
我下面用一个生活中最常用到的东西来给大家讲解一下哈希表。
【通讯录】
微信好友列表中好友排列就是一个按名字散列的通讯录,通讯录其实就是一个简易的哈希表。
大家可以假设如果没有按名字散列,那么微信好友的展示就只能按添加的先后顺序排列,这样我们在找某个好友时的效率就会很低,因为我们知道TA的名字,但不知道他保存在什么位置,只能从头翻到尾。
但如果我们按名称散列之后,我们就可以按照好友名称的拼音首字母很快的检索到好友。
这里取一个人名字的首字母,就是一种十分简单的哈希方法,而按名字哈希之后存放的容器就是一个表,我们上一讲中提到决定了数据顺序和位置关系的便是“数据结构“,那么上述的这种方式就是决定了我们好友数据的顺序和储存的位置关系,它就属于数据结构的一种:哈希表。
回过头来我们将百度百科的定义用微信好友的场景翻译一下就是:
散列表(Hash table,也叫哈希表),是根据