美文网首页
HashMap的时间复杂度分析

HashMap的时间复杂度分析

作者: 鸿雁长飞鱼龙潜跃 | 来源:发表于2019-05-20 19:01 被阅读0次

HashMap容器O(1)的查找时间复杂度只是其理想的状态,而这种理想状态需要由java设计者去保证。

在由设计者保证了链表长度尽可能短的前提下,由于利用了数组结构,使得key的查找在O(1)时间内完成。

可以将 HashMap分成两部分来看待,hash和map。map只是实现了键值对的存储。而其整个O(1)的查找复杂度很大程度上是由hash来保证的。

HashMap对hash的使用体现出一些设计哲学,如:通过key.hashCode()将普通的object对象转换为int值,从而可以将其视为数组下标,利用数组O(1)的查找性能。

OK,下面我们来看看HashMap中新增元素的时间复杂度。

put操作的流程:

第一步:key.hashcode(),时间复杂度O(1)。

第二步:找到桶以后,判断桶里是否有元素,如果没有,直接new一个entey节点插入到数组中。时间复杂度O(1)。

第三步:如果桶里有元素,并且元素个数小于6,则调用equals方法,比较是否存在相同名字的key,不存在则new一个entry插入都链表尾部。时间复杂度O(1)+O(n)=O(n)。

第四步:如果桶里有元素,并且元素个数大于6,则调用equals方法,比较是否存在相同名字的key,不存在则new一个entry插入都链表尾部。时间复杂度O(1)+O(logn)=O(logn)。红黑树查询的时间复杂度是logn。

通过上面的分析,我们可以得出结论,HashMap新增元素的时间复杂度是不固定的,可能的值有O(1)、O(logn)、O(n)。

二,hash碰撞问题

HashMap在put元素时,首先会计算key的hashcode,这时候不会去调用equals方法。为什么呢?因为equals方法的时间复杂度是O(n)。但是HashMap存在hash碰撞问题,最坏的情况下,所有的key都被分配到了同一个桶,这时map的put和get时间复杂度都是O(n)。

所以HashMap的设计者必须要考虑的一个问题就是减少hash碰撞。

HashMap解决哈希冲突采用的是哪种方式呢?

答:HashMap解决哈希冲突采用的是链地址法。说白了就是把冲突的key连接起来,放到桶里。当桶中的元素个数不超过6个时,以单链表的形式串起来,当桶中的元素个数超过6个时,以红黑树的形式串起来。

通过上面的分析,我们可以得出结论,HashMap的hash操作的时间复杂度是O(1),HashMap的equals操作的时间复杂度是O(n)。

相关文章

  • 两数之和 - Rust

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

  • hashMap.containsKey(value)时间复杂度分

    分析hashMap.containsKeyhashMap.containsKey(value)的时间复杂度为什么是...

  • HashMap的时间复杂度分析

    HashMap容器O(1)的查找时间复杂度只是其理想的状态,而这种理想状态需要由java设计者去保证。 在由设计者...

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

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

  • TwoSum

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

  • 针对封装数组的简单复杂度分析

    完成了数组的封装之后我们还需对其进行复杂度分析:此处的复杂度分析主要是指时间复杂度分析,算法的时间复杂度反映了程序...

  • leetcode-1. 两数之和

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

  • 复杂度分析

    为什么需要复杂度分析? 大O复杂度表示法 时间复杂度分析 常见复杂度量级 复杂度量级简单说明 空间复杂度 时间复杂...

  • 一个好的算法如何测评

    一个算法的好坏可以根据复杂度分析来测评. 复杂度分析包括时间复杂度和空间复杂度. 1.时间复杂度 需要考虑: 1)...

  • map:169.求众数(投票算法)

    求众数 哈希Map 复杂度分析 时间复杂度:O(N) 空间复杂度: O(N) 投票算法 复杂度分析

网友评论

      本文标题:HashMap的时间复杂度分析

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