自己动手实现java数据结构(五)哈希表
发布时间:2021-04-02 08:26:10 所属栏目:站长百科 来源:网络整理
导读:副标题#e# 1.哈希表介绍 前面我们已经介绍了许多类型的数据结构。在想要查询容器内特定元素时,有序向量使得我们能使用二分查找法进行精确的查询((O(logN)对数复杂度,很高效)。 可人类总是不知满足,依然在寻求一种更高效的特定元素查询的数据结构,哈希表
|
因此getIndex方法的时间复杂度为O(1)。
* 通过key的hashCode获得对应的内部数组下标
* key 传入的键值key
* 对应的内部数组下标
* getIndex(K key){
return getIndex(key,1)">.elements);
}
* 通过key的hashCode获得对应的内部数组插槽slot下标
* elements 内部数组
* int getIndex(K key,EntryNode<K,1)">[] elements){
){
::: null 默认存储在第0个桶内
return 0;
}{
int hashCode = key.hashCode();
:::通过 高位和低位的异或运算,获得最终的hash映射,减少碰撞的几率
int finalHashCode = hashCode ^ (hashCode >>> 16);
return (elements.length-1) & finalHashCode;
}
}
3.3 链表查询方法:当出现hash冲突时,会在对应插槽处生成一个单链表。我们需要提供一个方便的单链表查询方法,将增删改查接口的部分公用逻辑抽象出来,简化代码的复杂度。 值得注意的是:在判断Key值是否相等时使用的是EntryNode.keyIsEquals方法,内部最终是通过equals方法进行比较的。也就是说,判断key值是否相等和其它数据结构一样,依然是由equals方法决定的。hashCode方法的作用仅仅是使我们能够更快的定位到所映射的插槽处,加快查询效率。 (编辑:网站开发网_盐城站长网 ) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐

