散列是一种常用的数据存储技术,散列后的数据可以快速地插入或取用。
散列使用的数据结构叫散列表。在散列表上插入、删除和取用数据都非常快,但是对于查找操作来说却效率低下,比如查找一组数据中的最大值和最小值。这些操作得求助于其它数据结构,二叉查找数就是一个很好的选择。
随后实现的散列表是基于数组进行设计的。所有元素根据和该元素对应的键,保存在数组的特定位置。使用散列表存储数据时,通过一个散列函数将键映射为一个数字,这个数字的范围是 0 到散列表的长度。
理想情况下,散列函数会将每个键值映射为一个唯一的数组索引。然而,键的数量是无限的,数组的长度是有限的,一个更现实的目标是让散列函数尽量将键均匀地映射到数组中。
即使使用一个高效的散列函数,仍然存在将两个键映射成同一个值的可能,这种现象称为碰撞,当碰撞发生时,我们需要由方案去解决。
要确定的最后一个问题是:散列表中的数组究竟应该由多大?这是编写散列函数时必须要考虑的。对数组大小常见的限制是:数组长度应该是一个质数。
