day_9——什么是哈希表?

Day_9 —— 什么是哈希表?

今天的打卡题,我们就来学习最重要的数据结构之一:散列表或哈希表,那么什么是哈希表呢?哈希表怎么做到 O(1) 时间复杂度找到某个元素的呢?

提供参考资料如下,大家可参考。《我的第一本算法数》

在这里插入图片描述

图片1:哈希表的基本用途

在这里插入图片描述

图2:哈希表的查找规则:

在这里插入图片描述

图3:哈希表常遇到键冲突问题:

在这里插入图片描述

图 4 :解决方法

星球内的星友直接学习本书的 1-6 解即可。然后是打卡题:什么是哈希表?哈希表怎么做到 O(1) 时间复杂度找到某个元素?

哈希表是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。

有两种不同类型的哈希表:哈希集合和哈希映射。

  • 哈希集合集合数据结构的实现之一,用于存储非重复值
  • 哈希映射映射 数据结构的实现之一,用于存储(key, value)键值对。

标准模板库的帮助下,哈希表是易于使用的。大多数常见语言(如Java,C ++ 和 Python)都支持哈希集合和哈希映射。

通过选择合适的哈希函数,哈希表可以在插入和搜索方面实现出色的性能

在这里插入图片描述

哈希表的数据结构图

如图中清晰可知,hash表是基于数组+链表的实现的。数组在内存中是一块连续的空间,只要知道查找数据的下标就可快速定位到数据的内存地址,即数组查找数据的时间复杂度为O(1)。hash表的存储结构是<key,value>的形式,数据读取时,只需提供key就可快速查找到value。hash表依据数组利用下标快读查找数据的特性来实现这样的查找方式的。也就是如上图中所示,hash表的物理存储其实是数组。

如果我们能够根据 key 计算出数组下标,那么就可以快速在数组中查找到需要的 key 和 value。那hash表示怎样实现的呢,如下图所示:

在这里插入图片描述

由图中展示的一样,最简单的方法就是余数法,即使用 hash 表的数组长度对 k e y key key h a s h C o d e hashCode hashCode 求余, 余数即为 hash 表数组的下标,使用这个下标就可以直接访问得到 hash 表中存储的 <key, value>。但是如果不同的 key 计算出来的数组下标相同怎么办?于是就有了图一中所示的链表,它就是为了解决这个问题(所谓的hash冲突)而衍生的。这里需要注意的是,<key, value> 数据并不会直接存储在 Hash 表的数组中,因为数组要求存储固定数据类型,主要目的是每个数组元素中要存放固定长度的数据。所以,数组中存储的是<key, value> 数据元素的地址指针。一旦发生 Hash 冲突,只需要将相同下标,不同 k e y key key 的数据元素添加到这个链表就可以了。查找的时候再遍历这个链表,匹配正确的 k e y key key

参考内容

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值