一、引入
概念:
哈希表也叫散列表
结构:
结构有多种,最流行、最容易理解的是:顺序表+链表
主结构:
顺序表,每个顺序表的节点单独引出一个链表
二、哈希表基本操作
1.添加数据
1.计算哈希码,使用hashcode()方法,返回值是一个int类型的值,整数的哈希码值是本身
2.计算在哈希表中存储的位置:
y=k(x)x%11
y:在哈希表中的存储位置 X:哈希码
3.存入哈希表:
①一次存入成功
②多次添加成功,出现冲突,调用equals方法和对应链表中的元素进行比较,到最后结果都是false,创建新节点,存储数据,加到链表末尾
③添加失败,不添加,出现冲突,且equals方法返回true,表明重复,不添加
特点:添加数据快、数据唯一、无序
2.hasCode与equals的神奇作用
hashCode():计算哈希码值,是一个整数,可以根据哈希码值计算出数据在哈希表中的存储位置
equals():添加时出现冲突,需要使用该方法进行比较,判断是否相同;查询时也需要使用该方法判断是否相同
3.如何减少哈希冲突
1.哈希表的长度和表中的记录数的比例--装填因子
装填因子=表中的记录数/哈希表的长度
如果装填因子越小,表明表中还有很多的空单元,则添加发生冲突的可能性越小;而装填因子越大,则发生冲突的可能性就越大,在查找时所耗费的时间就越多。
因此,一般情况下,装填因子取值0.5
2.哈希函数的选择
直接定址法、平方取中法、折叠法、除留取余法(y = x%11)
3.处理冲突的方法
链地址法、开放地址法、再散列法、建立一个公共溢出区