JAVA 哈希表

本文详细解读哈希表,介绍其基于数组与链表的结构,如何通过哈希函数快速查找,以及在Java中的应用实例。重点讲解了哈希函数的作用和如何避免冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA 哈希表

哈希表
哈希表是采用链表加数组结构的一种结构
哈希表也叫散列表,哈希表是一种数据结构,它提供了快速的插入操作和查找操作,无论哈希表总中有多少条数据,插入和查找的时间复杂度都是为O(1),因为哈希表的查找速度非常快,所以在很多程序中都有使用哈希表,例如拼音检查器。

哈希表也有自己的缺点,哈希表是基于数组的,我们知道数组创建后扩容成本比较高,所以当哈希表被填满时,性能下降的比较严重。

哈希表采用的是一种转换思想,其中一个中要的概念是如何将「键」或者「关键字」转换成数组下标?在哈希表中,这个过程有哈希函数来完成,但是并不是每个「键」或者「关键字」都需要通过哈希函数来将其转换成数组下标,有些「键」或者「关键字」可以直接作为数组的下标。我们先来通过一个例子来理解这句话。

我们上学的时候,大家都会有一个学号「1-n号」中的一个号码,如果我们用哈希表来存放班级里面学生信息的话,我们利用学号作为「键」或者「关键字」,这个「键」或者「关键字」就可以直接作为数据的下标,不需要通过哈希函数进行转化。如果我们需要安装学生姓名作为「键」或者「关键字」,这时候我们就需要哈希函数来帮我们转换成数组的下标。

哈希函数
哈希函数的作用是帮我们把非int的「键」或者「关键字」转化成int,可以用来做数组的下标。比如我们上面说的将学生的姓名作为「键」或者「关键字」,这是就需要哈希函数来完成,下图是哈希函数的转换示意图。

在这里插入图片描述
假设我们有这些数组需要存储到哈希表中
那么我们首先要计算每一个字符串的哈希值
在这里插入图片描述

然后根据对应的规则将哈希值转换成数组下标(这个规则主要是哈希函数来完成的,这里举例为hashset的哈希函数),哈希表会是一个具有16长度的数组
在这里插入图片描述

并且会通过%16来获得对应的下标值,
在这里插入图片描述
首先存入hello到哈希表下标为2的位置,发现没有元素,直接存进去
然后存取world,先检查下标二里面的元素的哈希值和需要存进去的元素的哈希值是否相等,发现不相等,将world存进去,和hello链接起来
java字符串同理
存取第二个world,同理先比较哈希值,发现哈希值相同,然后会去比较两个值,发现值也相同,所以这个world不存进去
以下同理

如有错误,欢迎指正!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值