加入收藏 | 设为首页 | 会员中心 | 我要投稿 网站开发网_盐城站长网 (https://www.0515zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

自己动手实现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方法的作用仅仅是使我们能够更快的定位到所映射的插槽处,加快查询效率。

(编辑:网站开发网_盐城站长网 )

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!