数据结构之哈希表

哈希表

哈希表只是一种数据的组织形式,以键值对的方式的一种数据储存形式,但是有不同的实现

基于数组的实现是,首先数组的索引与值。就是一种比数组和链表在一些方面,增删改查数据,更具有优势,效率更加高,

也是输入index就能快速的得到对应index的value,其实现原理是,首先通过输入的值与哈希算法计算出来一个hash值,将哈希值对数组的长度(capacite)取模,去访问哈希表里对应的桶,从这个桶里面,然后快速的找到对应index的value。

哈希表,的底层是有一个输入空间和有一个输出空间,往往,输出空间,即要少于输入空间,由于这个原因,不同的输入的值就可能会出现相同的值,即哈希冲突,

负载因子 Load Factor」是哈希表的一个重要概念,其定义为哈希表的元素数量除以桶数量,用于衡量哈希冲突的严重程度,也常被作为哈希表扩容的触发条件。例如在 Java 中,当负载因子超过 0.75 时,系统会将哈希表容量扩展为原先的 2 倍。

为了解决哈希冲突,可以从扩大输出空间入手,但是,由于现实成本的限制,不可能在一开始,输出空间被搞的无限大,即出现了基于链表的哈希表

链式地址,将单个元素转换链表,将键值对作为链表节点,将发生冲突的键值对都储存在同一链表中

链式地址下,哈希表的操作方法包括:

  • 查询元素:输入 key ,经过哈希函数得到数组索引,即可访问链表头节点,然后遍历链表并对比 key 以查找目标键值对。
  • 添加元素:先通过哈希函数访问链表头节点,然后将节点(即键值对)添加到链表中。
  • 删除元素:根据哈希函数的结果访问链表头部,接着遍历链表以查找目标节点,并将其删除。

注:本文图片来源于Hello算法中,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

deadline是第一生产力,

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

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

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

打赏作者

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

抵扣说明:

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

余额充值