图解数据结构(04) -- 哈希表

本文介绍了哈希表的概念,强调其提供键值映射并支持快速查找的特点。讨论了哈希函数在Java HashMap中的实现,通过取模运算将Key转化为数组下标。同时,解释了哈希表的读写操作,包括解决哈希冲突的开放寻址法和链表法,并探讨了HashMap的扩容机制。文章最后简要回顾了数组、链表、栈和队列等数据结构。

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

1、什么是哈希表

哈希表(hash table),这种数据结构提供了键(Key)和值 (Value)的映射关系;只要给出一个Key,就可以高效查找到它所匹配的Value,时间复杂度接近于O(1)
在这里插入图片描述

2、哈希函数

散列表在本质上也是一个数组,可是数组只能根据下标,像a[0]、a[1]、a[2]、a[3]、a[4]这样来访问,而散列表的Key则是以字符串类型为主的,例如以学生的学号作为Key,输入002123,查询到李四;或者以单词为Key,输入by,查询到数字46……所以需要一个“中转站”,通过某种方式,把Key和数组下标进行转换,这个中转站就叫作哈希函数。
在这里插入图片描述

哈希函数的实现

以Java的常用集合HashMap为例,来讲解哈希函数在Java中的实现:
在Java及大多数面向对象的语言中,每一个对象都有属于自己的hashcode,这个hashcode是区分不同对象的重要标识,无论对象自身的类型是什么,它们的 hashcode都是一个整型变量。
既然都是整型变量,想要转化成数组的下标简单的转化方式就是按照数组长度进行取模运算

index = HashCode (Key) % Array.length

通过哈希函数**可以把字符串或其他类型的Key,转化成数组的下标 index;**例如给出一个长度为8的数组,则当 key=001121时,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值