06-哈希表

基本介绍

散列表(Hash table,也叫哈希表 ),是根据关键码值(key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中 一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放的数组叫做散列表。时间复杂度接近于O(1)。

哈希介绍

hash-散列

散列可以通过一定的计算规则,使得集合中的元素可以分类排列,从而快速查找。

哈希函数介绍

哈希的过程中需要使用哈希函数进行计算。

哈希函数是一种映射关系,根据数据的关键词 key ,通过一定的函数关系,计算出该元素存储位置的函数。

  • 直接地址法
  • 除留余数法
  • 数字分析法

哈希冲突

选用哈希函数计算哈希值时,可能不同的key会得到相同的结果。

解决方法

拉链法

将所有关键字为近义词的结点链接在同一个单链表中

hashmap中解决hash冲突的方式就是拉链发,且装填因子为0.75。

装填因子指的是单链和主链的比例。
在这里插入图片描述

开放地址法

用开放定址法解决冲突的做法是:当冲突发生时,使用某种探测技术在散列表中形成一个探测序列。沿此序列逐个单元地查找,直到找到给定的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入,在探查到开放的地址,则可将待插入的新结点存人该地址单元)。查找时探测到开放的地址则表明表中无待查的关键字,即查找失败。

当冲突发生时,使用某种探查(亦称探测)技术在散列表中寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到

按照形成探查序列的方法不同,可将开放定址法区分为线性探查法、二次探查法、双重散列法等。

Java中,ThreadLocal所使用的就是开放寻址法。

影响哈希冲突的因素

  1. 哈希函数是否均匀;
  2. 处理冲突的方法;
  3. 哈希表的加载因子。

哈希表的加载因子和容量决定了在什么时候桶数(存储位置)不够,需要重新哈希。

加载因子太大的话桶太多,遍历时效率变低;太大的话频繁 rehash,导致性能降低。所以加载因子的大小需要结合时间和空间效率考虑。

回答: 在.NET Framework中,集合是一种用于存储和操作数据的数据结构。集合提供了比数组更灵活和功能更强大的方式来组织和访问数据。集合可以根据需要自动扩展大小,并且可以存储不同类型的数据。与数组不同,集合的长度是动态的,可以根据需要进行调整,这使得集合更加灵活和高效。\[1\] 在.NET Framework中,常用的集合包括ArrayList、List<T>、Hashtable、Dictionary<TKey, TValue>、Stack、Queue、SortedList、SortedDictionary、HashSet、SortedSet和LinkedList。每种集合都有其特定的用途和优势。例如,ArrayList和List<T>类似于数组,可以按索引访问元素,而Hashtable和Dictionary<TKey, TValue>是键值对集合,可以通过键来访问值。Stack和Queue分别是堆栈和队列集合,SortedSet和SortedDictionary是有序集合,HashSet是无序且不重复的集合,LinkedList是双向链表集合。\[1\] 此外,.NET Framework还提供了ConcurrentDictionary<TKey, TValue>,它是一个线程安全的基于散列的字典,支持并发的多线程读写和线程安全的迭代。它实现了标准的IDictionary<TKey, TValue>接口,并提供了对字典的并发访问的支持。\[2\] 总之,.NET Framework提供了丰富的集合类,可以满足不同的需求。这些集合类可以帮助开发人员更方便地组织和操作数据,提高代码的效率和可读性。\[3\] #### 引用[.reference_title] - *1* [(06)基础强化:ArrayList与Hashtable,比较器Comparer,泛型集合List与Dictionary,V>,枚举器与迭代器,泛型的...](https://blog.csdn.net/dzweather/article/details/130544279)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [.NET中的泛型集合](https://blog.csdn.net/kalvin_y_liu/article/details/118640527)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值