Hash表的时间复杂度为什么是O(1)?

本文探讨了哈希表的时间复杂度为何通常被认为是O(1),从数组和链表的基础开始,阐述了哈希表的工作原理,包括Key的HashCode计算、哈希冲突及其解决方案,并指出在理想情况下,哈希表的查询效率高,但在冲突严重时可能退化为O(N)。
摘要由CSDN通过智能技术生成

文章目录


要了解 Hash 表,需要先从数组说起

数组

数组会在内存中申请连续的地址空间,且数组中各元素类型必须一致

在这里插入图片描述
上图假设数组元素为整型,由于整形占据4各字节的内存空间,所以上图每个数组的内存地址从下标0开始,下标每增加1,地址就增加4
所以只要知道了数组的下标,就可以计算得到数组的地址,比如元素4,我们知道数组起始地址后,只要用起始地址+下标*4就可以知道元素4的地址,所以访问指定下标的数组元素的时间复杂度为O(1)
如果只知道数组的值反查数组下标,则需要遍历真个数组,时间复杂度为O(N)
链表
不同于数组必须要连续的内存空间,链表可以使用零散的内存空间存储数据。不过,因为链
表在内存中的数据不是连续的,所以链表中的每个数据元素都必须包含一个指向下一个数据
元素的内存地址指针。如下图,链表的每个元素包含两部分,一部分是数据,一部分是指向
下一个元素的地址指针。最后一个元素指向 null,表示链表到此为止。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少林码僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值