一、散列表(Hash Table)
散列表是数组的一种扩展,用的是数组支持按照下标随机访问的特性。
1. 散列思想
假设在运动会中,为了通过编号快速找到对应运动员的信息,当编号不再是1-89这样简单的排列时,就需要一种方法,使编号跟数组下标的元素一一对应。例如,编号前两位表示年级,中间两位表示班级,最后两位表示编号,那么一一对应的关系就是将最后两位作为数组下标。
运用这种散列思想,参赛选手的编号叫做键(Key),把参赛编号转化为数组下标的影射方法叫做散列函数(也叫哈希函数),散列函数计算得到的值叫散列值(哈希值)。
因此,散列表用的就是这样的思想,通过散列函数把元素的键值影射为下标,将数据存储在对应下标的位置。当查询元素时,用同样的散列函数,将键值转化为数组下标,从对应数组下标的位置取数据。
2.散列函数
散列函数中**hash(key)**中,key表示元素的键值,hash(key)表示经过散列计算后得到的散列值。例如前面运动员的例子中,散列函数:
int hash(String key) {
// 获取后两位字符
string lastTwoChars = key.substr(length-2, length);
// 将后两位字符转换为整数
int hashValue = convert lastTwoChas to int-type;
return