# 链地址法
链地址法(拉链法)是一种比较常见的解决冲突的方案
如果你理解了为什么产生冲突,看到以下图后,就可以立马理解链地址法是什么含义了。将每个数字对10 进行去取操作。则余数的范围 0 ~ 9 作为数组的下标值。并且数组每一个下标值对应的位置存储的不在 是一个数字了。而是存储经过取余操作后得到相同余数的数字组成的数组或链表。

从图片中可以看出,链地址法解决冲突的办法是每个数组单元中存储的不再是单个数据,而是一个链条。
这个链条是数组还是链表呢?
数组或者链表在这里其实都可以,效率上也差不多。
因为根据哈希化的 index 找出这个数组或者链表时,通常就会使用线性查找。这个时候数组和链表的效率是差不多的。
如果在某些场景中,会将新插入的数据放在数组或者链表的最前面,因为觉得新插入的数据用于取出的可能性比较大。 这种情况最好采用链表。因为数组在首位插入数据是需要将所有其他项后移的,而链表没有这样的问题。
这个链条常见的是数组或者是链表。如果存放的是链表,一旦发现重复,将重复的元素插入到链表的首端或者末尾即可。 当查询数据时,先根据哈希化后的下标值找到对应的位置,再取出链表,依次查询找寻数据。