复习一下常见的数据结构与算法
实现数据的快速查找
一个哈希函数需要具备如下特征:
其输入为: 任意二进制数据,输出为:整数(Buckets的位置)
如何评价一个哈希函数是否优秀了?这里我们主要看:
常见的哈希函数包括:
实现逻辑:
for(char c : str){
hashCode = 31 * hashCode + c;
}
所以在Aa,BB、Ab,BC时会出现碰撞。通过如下测试代码可以发现,他们的hashCode是相同的。
System.out.println("Aa".hashCode());
System.out.println("BB".hashCode());
open hashing, 又称拉链法 separate chaining
一言以蔽之,每个Bucket放的都是一个链表头结点的引用,假如冲突了就在这个链表后面加一个结点即可。(链表,往下拉)
closed hashing,又称开址法 open addressing
当前位置已有其他元素后,再通过新算法为其找新的位置,(如这个位置的下一个空位).
(有哪些常见的查找新位置的算法呢?线性探查,待补充!)
哈希表扩缩容时,需要对已有数据的位置进行重新编排,这个就是常说的重哈希。
负载因子load factor,等于哈希表元素的个数/哈希表容量,用于描述哈希表当前的负载。
一般当负载因子大于0.5的时候,检索性能急剧下降,冲突概率变高,此时一般就要进行哈希表扩容与重哈希了。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。