底层是数组和链表的结合,叫做链表散列。用hashcode来获取在哈希表中的索引,返回一个int数值。

对象相等,hashcode也相等;但hashcode相等,对象不一定相等(比如一个节点上有一串链表元素不同对象)

哈希算法:把字符串转成数字的算法,就是把key进行运算,得到地址。把字符串的每个字母的assic码相加然后取余,得到索引位置。

常见的哈希算法

 

 

但是不同的对象,可能会产生同样的地址,会发生哈希冲突

处理哈希冲突的方法:

1.开放寻址法:(线行探查法)找到空的坑就进入;(平方探查法)或者找到坑后会到坑地址的平方进入,避免元素全部集中在一块。

2.拉链法:冲突时直接在同一地址形成一个链表,依次加在链表里,但是查找效率低。