Java数据结构——哈希表

本文详细介绍了哈希表的概念、哈希函数的构造方法,包括直接定址法、平方取中法、折叠法和除留余数法,并探讨了处理哈希冲突的开放定址法、链地址法等策略。此外,还提供了哈希表的Java实现及查找代码示例。
摘要由CSDN通过智能技术生成

一、你不了解哈希表

1. 什么是哈希表?

  • 我们已经知道了一个数据项关键字映射存储位置
  • 我们查找过程,其实就是比较,不断比较关键字,从而才可以找到存储位置。
  • 现在你应该可以发现,他们就像函数一样,X=关键字,Y=存储位置。
  • 哈希表的难点就在于找映射关系:f(x) = y
  • 称函数为:哈希函数。
  • 按这个思想建立的表为哈希表
  • 哈希表的优点:在于它不需要不断比较,而是直接找到,一次就好。
  • 黑体字是重点

2. 冲突

  • 函数的数学定义有一点:不允许一个X对应多个Y
  • 哈希函数也是函数,所以还剩下一种情况:多个X对应一个Y
  • 所以哈希表要解决的冲突:不同的关键字可能得到同一存储地址
  • 错误可以解决,冲突不能完全避免。我们通常要设定一种处理冲突的方法。

3. 关键名词

  • 哈希表:一个关键字对应一个储存位置,形成的表。
  • 存储位置 = 哈希地址 = 散列地址
  • 函数关系 = 映射关系 = 对应关系 = 哈希构造 = 散列
  • H(x) = y

二、你已经知道了哈希表

(一)、哈希函数的构造方法

- 目标:构造好的哈希函数。
- 好的哈希函数:关键字经过哈希函数得到一个“随机的地址”,以便使一组关键字的哈希地址均匀分布在整个地址区间中,从而减少冲突。

1. 直接定址法

H ( k e y ) = k e y 或 H ( k e y ) = a ∗ k e y + b H(key) = key 或 H(key) = a*key + b H(key)=keyH(key)=akey+b

2. 数字分析法

太 灵 活 了 , 知 道 有 这 种 方 法 就 行 了 太灵活了,知道有这种方法就行了

3. 平方取中法——重要
取 关 键 字 平 方 后 的 中 间 几 位 为 哈 希 地 址 取关键字平方后的中间几位为哈希地址

  • 如:
  • 在这里插入图片描述

4. 折叠法

将 关 键 字 分 割 成 相 同 的 几 部 分 ( 最 后 一 部 分 的 位 数 可 以 不 同 ) , 然 后 取 这 几 部 分 叠 加 和 ( 舍 去 进 位 ) 作 为 哈 希 地 址 将关键字分割成相同的几部分(最后一部分的位数可以不同),然后取这几部分叠加和(舍去进位)作为哈希地址

  • 折叠发适合关键字位数多,且每一位上的数字分布大致均匀。
  • 如:
  • 在这里插入图片描述

5. 除留余数法——重要

H ( k e y ) = k e y M O D

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

姜满月

鼓励,鼓励,更加努力

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

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

打赏作者

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

抵扣说明:

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

余额充值