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

哈希表查询的时间复杂度

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

    相关文章

      网友评论

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

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