《数据结构与算法》总结(六)哈希表

目录
  • 哈希表
  • 哈希冲突(Hash Collision)
  • JDK1.8的哈希冲突解决方案
  • 哈希函数
  • 如何生成key的哈希值
  • Long和Double的哈希值
  • 字符串的哈希值
  • 关于31的探讨
  • 自定义对象的哈希值
  • 自定义对象作为key
  • 哈希值的进一步处理:扰动计算
  • 装填因子
  • TreeMap vs HashMap
  • LinkedHashMap
  • 关于使用%来计算索引
一 哈希表
  • 哈希表也叫做散列表( hash 有剁碎的意思)

  • 它是如何实现高效处理数据的?

    • put(“Jack”, 666);
    • put(“Rose”, 777);
    • put(“Kate”, 888);

image

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:413038000,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

以下资料在群文件可自行下载!

  • 添加、搜索、删除的流程都是类似的
  1. 利用哈希函数生成 key 对应的 index【O(1)】
  2. 根据 index 操作定位数组元素【O(1)】
  • 哈希表是【空间换时间】的典型应用

  • 哈希函数,也叫做散列函数

  • 哈希表内部的数组元素,很多地方也叫 Bucket(桶),整个数组叫 Buckets 或者 Bucket Array

二 哈希冲突(Hash Collision)
  • 哈希冲突也叫做哈希碰撞
  1. 2 个不同的 key,经过哈希函数计算出相同的结果
  2. key1 ≠ key2 ,hash(key1) = hash(key2)

image

  • 解决哈希冲突的常见方法
  1. 开放定址法(Open Addressing)
    ✓ 按照一定规则向其他地址探测,直到遇到空桶

  2. 再哈希法(Re-Hashing)
    ✓ 设计多个哈希函数

  3. 链地址法(Separate Chaining)
    ✓ 比如通过链表将同一index的元素串起来

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值