HashMap, HashTable,HashSet,TreeMap 的时间复杂度

hashSet,hashtable,hashMap 都是基于散列函数, 时间复杂度 O(1) ,但是如果太差的话是O(n);

TreeSet==>O(log(n))==> 基于树的搜索,只需要搜索一半即可

O⑴的原因是离散后,下标对应关键字

hash就是散列,甚至再散列。但是我一直对hash表的时间复杂度有个疑问。一个需要存储的字符串,通过hash函数散列到一个相对较短的索引,使得存取速度加快。但为什么存取的时间复杂度能达到常量级O(1)呢?? 查找时搜索索引不需要费时间吗?为什么不是O(n)呢? n是hash表的长度,

如果对Hashtable的构造有很深的理解的话,就知道了,Hashtable 其实是综合了数组和链表的优点,当Hashtable对数值进行搜索的时候,首先用该数值与Hashtable的长度做了取模的操作,得到的数字直接作为hashtable中entry数组的index,因为hashtable是由entry数组组成的,因此,可以直接定位到指定的位置,不需要搜索,当然,这里还有个问题,每个entry其实是链表,如果entry有很多值的话,还是需要挨个遍历的,因此可以这样讲Hashtable的时间复杂度最好是O(1)但是最差是 O(n) 最差的时候也就是hashtable中所有的值的hash值都一样,都分配在一个entry里面,当然这个概率跟中1亿彩票的概率相差不大。

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

常用数据结构的时间复杂度

转自
http://www.cnblogs.com/aspirant/p/8902285.html
http://www.cnblogs.com/aspirant/p/8908399.html
http://www.cnblogs.com/aspirant/p/8906018.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值