定义:使用一个简单的无序数组来实现将键的值转化为数组的索引,此索引存储键对应的值,这样就可以快速访问任意键对应的值
把键转换为索引:使用散列函数将被查找的键转换为数组的索引,但是可能不同的键会被散列函数转化为同一个索引,通过拉链法和线性探测法可以避免冲突。
拉链法:如果发生碰撞,则将索引大小为M 的键与索引为M的数组元素匹配一个链表,链表中的每一个节点都存储散列值为M的键值对,这就是拉链法
线性探测法:当发生碰撞时(一个键被散列到一个已经有键值对的数组位置),我们会检查数组的下一个位置是否是当前节点(key和value都相等)或为空,如果是节点则不用,否则继续检查下一个,直到null,则插入,这个过程被称作线性探测
参考文献:
[1] Java数据结构与算法解析(十二)——散列表——经典推荐,讲的比较详细
网友评论