HashSet

在C#中HashSet哈希集合,是用于存取唯一值的集合,他一般和字典Dictionary有一些混淆。

HashSet 只存储值,Dictionary存储键和值。

HashSet 一般用于去重或存唯一值,Dictionary一般存储key-value键值对对象。

 

HashSet 底层原理:

  HashSet 底层实现是基于哈希表存储数据,本质上是一种通过哈希函数将数据映射到数组索引的存储结构。它是一种基于数组的键值对存储机制,用于提供快速的数据存取操作。一个数据存储时,首先会通过哈希函数计算出一个哈希码,哈希码再通过计算(比如:哈希码除以哈希表数组长度取模)得到一个数字,这个数字代表的就是哈希桶所在的位置,哈希桶就是存储元素的地方,我们会将数据放在这个哈希桶里面,哈希桶就是一个数组。

但有时候,不同的元素会被映射成同一个哈希码,这样就会造成一个哈希桶有两个不同的元素,这就是哈希冲突,为了解决哈希冲突,我们增加了链表寻址,在每个桶里面放一个单向链表,当有两个不同的元素定位到一个桶里面时,新元素就会被加到链表头

 

这样存储一个元素“apple”的过程就是:将“apple”通过哈希函数计算出一个整数比如123,再将123和哈希桶的长度(10)取模得到3,这样就找到3号桶,在3号桶中如果发现已经有元素存在了,则证明发生了哈希冲突,这时就会在桶里面创建一个链表,如果已存在链表就通过equals比较有没有“apple”,有就不插入直接返回,没有就添加到链表头。

 

posted @ 2025-03-27 14:57  lv99  阅读(32)  评论(0)    收藏  举报