哈希表,散列表学习心得及其总结

本文介绍了哈希表作为搜索专用数据结构的基础,包括哈希函数如何将元素映射为数组下标,以及哈希冲突的不可避免性和解决策略。提到了闭散列和开散列两种解决冲突的方法,并强调了哈希函数设计的重要性。还讨论了Java中`hashCode()`方法的角色和`equals()`方法在确定对象等价性中的作用。总结指出,HashMap操作的高效性以及在处理哈希冲突时保持较低冲突率的重要性。
摘要由CSDN通过智能技术生成

哈希表,散列表—搜索专用的数据结果

背后的核心数据结构:数组 <-根据数组的随机访问的时间复杂度是o(1)

1.根据元素(关键字) =>确定一个整型的数值 分类编号
整型数值 = f(元素) f:哈希函数
2.上一步得到的整型数据,范围大。所以需要再把整型约束回合法的下标中
3.元素放入数组的该位置中
int [] array = new int[26] 数组的元素代表该位置字母的出现次数
a->0,b->1…
String cur = “asdasdasda”;
for( ch : cur.toCharArray()){
int index = f(ch);
array[index] ++:
}
这个就是一个哈希表的体现。

哈希冲突
例如: k1.quals(k2) == false && hash(k1) == hash(k2 )

1.哈希冲突的发生是否是必然的?
我们准备的哈希表是通用的,所以往往是无法避免的,
因为为了避免空间浪费
2.遇到哈希冲突的解决办法
1.闭散列:不引入新的结构,完全在数组中解决问题。(如果发生了被占用的情况,找打其他位置)
2.开散列 --哈系统
数组中的元素不再是 关键字元素了,而是关于关键字的一条链表
冲突是一个链表

1.冲突无法避免,但需要把冲突率降到一定的有效范围内
1.哈希函数需要设计合理
反例:func(Key key) {return 0;}
2.冲突率和某个数据有关
负载因子 = 个数/长度

int Object.hashCode();
1.留给个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值