散列表(Hash table,也叫哈希表)是一种通过将键(key)映射为值(value)从而实现快速查找的数据结构。
实现散列表的方法有很多种,在此介绍一种简单、常见的实现方式。
我们使用一个链表构成的数组与一个散列函数来实现散列表。当插入键(字符串或几乎其他所有数据类型)和值时,我们按照如下方法操作。
(1)首先,计算键的散列值。键的散列值通常为int或者long型。请注意,不同的键可能有相同的散列值。
(2)之后,将散列值映射为数组的索引。可以使用类似于hash(key) % array_length 的方式完成这一步骤。
(3)此数组索引处存储的元素是一系列由键和值为元素组成的链表。将映射到此索引的键和值存储在这里。由于存在冲突,我们必须使用链表。
时间复杂度
如果冲突发生很多次,最坏的情况下的时间复杂度是O(N) ,其中N是键的数量。
但是我们通常假设一个不错的实现
构造散列函数的方法
散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快定位。
原文:https://www.cnblogs.com/stringarray/p/12600944.html