哈希表
哈希表名字源于 Hash,也可以叫作散列表。哈希表是一种特殊的数据结构,它与数组、链表以及树等我们之前学过的数据结构相比,有很明显的区别。
哈希表的核心思想
哈希表的设计采用了函数映射的思想,将记录的存储位置与记录的关键字关联起来。这样的设计方式,能够快速定位到想要查找的记录,而且不需要与表中存在的记录的关键字比较后再来进行查找
简单理解为 地址 = f(关键字)
通过构建哈希表,直接构建关键字到地址的映射关系,查询可以降低时间复杂度,仅为O(1),之前的其他数据类型查询的时间复杂度为O(n)
哈希函数的致命问题——哈希冲突
假如Hash函数为每个字的开头大写字母的ASCII码之和
address (张一) = ASCII (Z) + ASCII (Y) = 90 + 89 = 179;
address (张二) = ASCII (Z) + ASCII (E) = 90 + 69 = 159;
address (张三) = ASCII (Z) + ASCII (S) = 90 + 83 = 173;
address (张四) = ASCII (Z) + ASCII (S) = 90 + 83 = 173;
f(张三)和f(张四)都是173,这个现象就叫哈希冲突
从本质上来看,哈希冲突只能尽量减少,不能完全避免。因为只要输入的数据量够多,分布够广,就可能发生冲突。
因此,哈希表需要设计合理的哈希函数,并且对冲突有一套处理机制。