1.哈希表的概念
哈希表直白来讲就是一张数组,哈希表中关键码就是数组的索引下标,然后通过下标访问数组中的元素。
2.哈希表用途
用来判断一个元素是否出现在集合里。
3.哈希函数
把关键字映射为哈希表上的索引的函数就是哈希函数,一般hashCode是通过特定编码方式,可以将其他数据格式转化为不同的数值,如果hashCode得到的数值大于tableSize了会对映射出来的索引数值进行取模操作。
4.哈希碰撞
如果要存储的内容大于哈希表的总长度,会出现哈希碰撞,这样会存在多个关键字映射到同一个索引的情况,解决哈希碰撞有两种方法,拉链法和线性探测法。
(1)拉链法
将发生碰撞的元素存储在链表上,这样可以通过索引找到元素。
拉链法的关键是要选择适当的哈希表的大小,这样既不会因为数组空值而浪费大量内存,也不会因为链表太长而在查找上浪费太多时间。
(2)线性探测法
使用线性探测法要保证表格大小大于数据规模,利用哈希表的空位解决碰撞问题,例如冲突的位置放了元素1,那么就向下找一个空位放置元素2,所以要求表格大小一定要大于数据规模 ,要不然哈希表上就没有空置的位置来存放 冲突的数据了。
5.常见的三种哈希结构:数组、集合、映射