美文网首页
哈希表查询的时间复杂度

哈希表查询的时间复杂度

作者: liboxiang | 来源:发表于2019-02-28 22:52 被阅读0次
 public V get(Object key) {  
        if (key == null)  
            return getForNullKey();  
        int hash = hash(key.hashCode());  
        for (Entry<K,V> e = table[indexFor(hash, table.length)];  
             e != null;  
             e = e.next) {  
            Object k;  
            if (e.hash == hash && ((k = e.key) == key || key.equals(k)))  
                return e.value;  
        }  
        return null;  
    }  
分四步:
  • 1.判断key,根据key算出索引。
  • 2.根据索引获得索引位置所对应的键值对链表。
  • 3.遍历键值对链表,根据key找到对应的Entry键值对。
  • 4.拿到value。
分析:

以上四步要保证HashMap的时间复杂度O(1),需要保证每一步都是O(1),现在看起来就第三步对链表的循环的时间复杂度影响最大,链表查找的时间复杂度为O(n),与链表长度有关。我们要保证那个链表长度为1,才可以说时间复杂度能满足O(1)。但这么说来只有那个hash算法尽量减少冲突,才能使链表长度尽可能短,理想状态为1。因此可以得出结论:HashMap的查找时间复杂度只有在最理想的情况下才会为O(1),而要保证这个理想状态不是我们开发者控制的。

相关文章

  • 数据结构之 哈希表 栈 队列

    哈希表 哈希表 支持 增删改查 四种操作。代码如下 哈希表的特性:增加, 查询, 修改 和 删除操作的时间复杂度...

  • LeetCode 1. 两数之和

    题目描述 题解 暴力法 时间复杂度为,空间复杂度为。 哈希表法 时间复杂度为,空间复杂度为。 哈希表法进阶 时间复...

  • 哈希表查询的时间复杂度

    分四步: 1.判断key,根据key算出索引。 2.根据索引获得索引位置所对应的键值对链表。 3.遍历键值对链表,...

  • 算法-哈希表算法总结

    1 哈希表模拟 思路:通过设计哈希表,模拟O(1)时间复杂度的哈希表。 2 数组作为哈希表 思路:数组就是简单的哈...

  • Hash Value

    一、哈希表 - 散列表 是一种具有高效查询的数据结构,时间复杂度为 O(1) 在表中根据 关键字key 查找 数据...

  • Leetcode day3 哈希表

    打卡完成,一共就四道题。哈希表的主要优势是查询的时间复杂度是O(1) collections.Counter(nu...

  • LeetCode 26. 删除排序数组中的重复项

    题目描述 题解 哈希表法 时间复杂度为,空间复杂度为。 双指针法 时间复杂度为,空间复杂度为。

  • 哈希表--一个神奇的东西

    哈希表对于数组的操作是特别好用的! 因为js中的对象是基于哈希表结构的,而哈希表的查找时间复杂度为O(1),所以很...

  • 141. 环形链表

    环形链表 方法一:哈希表 时间复杂度:O(1)空间复杂度:O(n) 方法二:双指针 时间复杂度:O(n) ...

  • MySQL索引简述--哈希索引

    哈希算法 哈希算法时间复杂度为O(1),且不只存在于索引中,每个数据库应用中都存在该数据结构。 哈希表 哈希表也为...

网友评论

      本文标题:哈希表查询的时间复杂度

      本文链接:https://www.haomeiwen.com/subject/txvluqtx.html