散列表(4)

  • 散列表也叫哈希表,提供key-value的映射关系
  • 通过hash(key)找到所匹配的value,时间复杂度接近于o(1)
  • 底层是一个数组

散列表的写put操作

在数组中插入一个个entry: 通过hash函数转化为数组的下标index, 但当插入的entry越来越多时,获取的下标可能是相同的,就会出现hash冲突, 解决的办法有:

  • 开放地址法
    当我们插入一个新的entry时如果发现当前位置已经被占用,可以按照某种寻址法去找另外的空档位置
  • 链表法
    hashmap数组中每个元素存储的是一个链表的头结点:当新来的entry映射到与之冲突的数组位置时就直接插入到当前位置的链表即可

散列表的读get操作

  • 通过哈希函数得到数组下标index
  • 通过index找到对应元素。如果当前元素不是想要的value,可以顺着当前链表往下找

散列表的扩容

  • 为什么要进行扩容?
    当插入很多entry之后,散列表会达到一定的饱和度,发生哈希冲突的概率会提高,某个位置的链表会很长,从而影响查询效率,就需要扩容来缓解

  • 扩容的条件
    当hash table的长度>当前的长度*负载因子(0.75)

  • 如何扩容

  1. 创建一个新的entry数组,长度是原来的2倍
  2. 重新hash:遍历源entry数组,把所有的entry 重新hash到新的数组当中

常见的哈希结构:1)数组 2)set(集合) 3)map(映射),其中set 与map的区别如下:
常见的哈希结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值