Python | 六、哈希表 Hash Table(列表、集合、映射)

哈希表基础

  • 哈希表是一类数据结构(哈希表包含数组、集合和映射,和前两篇文章叙述的字符串、链表平级)
  • 哈希表概念:类似于Python里的字典类型,哈希表把关键码key值通过哈希函数来和哈希表上的索引对应起来,之后输入key值可直接定位到对应索引位置,然后进行取值
  • 哈希表的好处:主要为查找方便,可快速判断一个元素是否在集合中
  • 哈希函数 :即关键码key值和存储位置(索引)的对应关系,一个散列函数,比如把小明映射为0,小李映射为1,如图
  • 哈希碰撞
    • 定义:当哈希函数的映射关系把多个关键码映射到了同一个哈希表索引上时,这种现象称为哈希碰撞,如图所示(哈希碰撞有时候是因为关键码的数量大于哈希表的长度,这时不可避免发生碰撞;但是也可能是哈希函数的对应关系不合理,使得即便仍有空索引,还是把部分关键码分配到了同一索引上)
    • 其实发生哈希碰撞不见得是个坏事,如果是因为关键码的数量大于哈希表的长度,说明此时哈希表的所有索引都被完全利用,没有发生内存浪费
    • 解决方案一:拉链法
      • 当发生冲突时,在对应索引位置通过链表结构储存多个关键码,如图所示
    • 解决方案二:线性探测法
      • 如果是哈希函数的对应关系不合理,使得即便仍有空索引,还是把部分关键码分配到了同一索引上,此时可以利用线性探测法,从发生冲突的索引位置开始,线性查找找到下一个空索引,然后把多余的关键码分配过去,如图所示

常见的三种哈希表结构

  • 列表
  • set集合
    • 是一种数据结构,常用于元素的查找和去重
    • 特点:元素不重复、乱序、可遍历、可变
    • 创建方式一:my_set = {1, 3, 5}
    • 创建方式二:my_set = set()或列表转集合my_set = set([1, 3, 5])
    • 元素查找:使用关键字in,如if "TOM" in my_set:
    • 元素去重:集合结构会进行自动去重操作
    • 数学操作:
      • 交集,set1 | set2将返回二者的交集
      • 并集,set1 & set2将返回二者的并集
      • 差集,set1 - set2将返回1中有,2中没有的元素
    • 常用方法
      • 添加元素,set.add(data)
      • 删除元素,set.remove(data)set.discard(),当删除集合中不存在的元素时,前者会引起异常,后者不会
      • 集合长度,len(set)
      • 清空集合,set.clear()
  • map映射
相关推荐
WBluuue8 小时前
数据结构与算法:树上倍增与LCA
数据结构·c++·算法
lkbhua莱克瓦249 小时前
Java基础——集合进阶用到的数据结构知识点1
java·数据结构·笔记·github
杨福瑞9 小时前
数据结构:单链表(2)
c语言·开发语言·数据结构
王璐WL10 小时前
【数据结构】单链表及单链表的实现
数据结构
z1874610300311 小时前
list(带头双向循环链表)
数据结构·c++·链表
T.Ree.12 小时前
cpp_list
开发语言·数据结构·c++·list
童话ing12 小时前
【Golang】常见数据结构原理剖析
数据结构·golang
是苏浙13 小时前
零基础入门C语言之C语言实现数据结构之顺序表应用
c语言·数据结构·算法
lkbhua莱克瓦2413 小时前
Java基础——常用算法3
java·数据结构·笔记·算法·github·排序算法·学习方法
小白程序员成长日记13 小时前
2025.11.07 力扣每日一题
数据结构·算法·leetcode