深入底层:Hashtable哈希表的初步理解

一、引入

概念:
	哈希表也叫散列表
结构:
	结构有多种,最流行、最容易理解的是:顺序表+链表
主结构:
	顺序表,每个顺序表的节点单独引出一个链表

哈希表结构

二、哈希表基本操作

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.处理冲突的方法
	链地址法、开放地址法、再散列法、建立一个公共溢出区 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值