美文网首页
面试中关于HashMap的时间复杂度O(1)的思考

面试中关于HashMap的时间复杂度O(1)的思考

作者: 氨基钠 | 来源:发表于2020-03-06 00:09 被阅读0次

今天在面试的时候说到HashMap,面试官问了这么一个问题:你说HashMap的get迭代了一个链表,那怎么保证HashMap的时间复杂度O(1)?链表的查找的时间复杂度又是多少?
在这之前我是阅读过HashMap的源码的:Java7源码浅析——对HashMap的理解
由上一个博客可知我们对HashMap的查询,如源代码所示:

    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),而要保证这个理想状态不是我们开发者控制的。

————————————————
版权声明:本文为CSDN博主「GrayHJX」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/donggua3694857/article/details/64127131/

相关文章

  • 面试中关于HashMap的时间复杂度O(1)的思考

    今天在面试的时候说到HashMap,面试官问了这么一个问题:你说HashMap的get迭代了一个链表,那怎么保证H...

  • TwoSum

    暴力暴力算法时间复杂度O(n²),空间复杂度O(1) 两次遍历 HashMap时间复杂度:O(n),我们把包含有 ...

  • leetcode-1. 两数之和

    1)循环嵌套,时间复杂度O(n²),耗时21ms。 2)用HashMap比对,时间复杂度O(n),耗时4ms。

  • HashMap 及其类似数据结构 原理分析对比

    HashMap简述 HashMap 是数组+ 链表 的数据结构。时间复杂度(理想状态)O(1)。(是数组 查找时间...

  • 单向链表是否回文(LeetCode234.回文链表)

    11月9日面试题 题目 面试时要求O(n)时间复杂度和O(1)空间复杂度。 解析 O(1)空间复杂度不借助额外的空...

  • 两数之和 - Rust

    采用 HashMap 记录减少时间复杂度: 复杂度分析空间复杂度: O(N):主要是记录 hash 值。时间复杂度...

  • 拼多多(未完)

    1、TreeMap查询写入的时间复杂度多少?(O(logN)) 2、HashMap线程安全,死锁怎么解决? syn...

  • OJ lintcode O(1)时间检测2的幂次

    用 O(1) 时间检测整数 n 是否是 2 的幂次。注意事项O(1) 时间复杂度您在真实的面试中是否遇到过这个题?...

  • Java并发容器ConcurrentHashMap(1.7&1.

      上一篇文章介绍了HashMap,HashMap虽然具有时间复杂度为O(1)的查询优势,但它不是线程安全的,为了...

  • c++ LRU设计

    HashMap中存储了指向LinkedList的指针,这样就可以保证在O(1)的访问复杂度。 referenceL...

网友评论

      本文标题:面试中关于HashMap的时间复杂度O(1)的思考

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