Hash(散列表)--C#

用数组或list存放数据 当访问数据或查找数据时,都需要通过遍历来查找下表获取值,耗时间

而使用Hash存储,是通过哈希函数直接存放元素值,查找迅速,T(n)=O(1)

有两种不同类型的哈希表:哈希集合和哈希映射

  • 哈希集合 是 集合数据结构的实现之一,用于存储非重复值

  • 哈希映射 是 映射数据结构的实现之一,用于存储(key, value)键值对

在C#中,哈希集合对应的是Hashset;哈希映射对应的是Hashtable和Dictionary

***使用数组也可以实现哈希表的形式 ***当数据量小时,首先考虑数组,其次考虑HashSet。当需要存键值对时,考虑用映射(如Dictionary...)。

(1)集合

Hashset 元素唯一
常用API:
Contains 、Remove 、
RemoveWhere:参数为Predicate<T> 委托,用于定义要移除的元素应满足的条件。
IsProperSubsetOf:用于判断 HashSet 是否为某一个集合的完全子集
UnionWith:集合的合并
IntersectWith:表示两个 HashSet 的交集
ExceptWith:表示数学上的减法操作,T(n)= O(N), 从setA 中移除调 setB的元素
SymmetricExceptWith:返回两个集合中不全有的元素集合

(2)映射

(HashMap是Jave中的哈希映射实现方式)

Hashtable是非泛型的,key类型都是Object。是线程安全的,在多线程环境中,需要手动同步,可以通过 lock 等同步机制来确保对 Hashtable 的并发访问是安全的。如果需要线程安全,推荐使用ConcurrentDictionary。

Dictionary是泛型集合,更严格,可规定输入数据类型。是非线程安全的,多线程环境中可能会导致异常或数据不一致。

另外还有ConcurrentDictionary,是兼具两者优点的。它是线程安全的,允许多个线程同时读取和写入,而不需要显式的锁定。它使用一种锁分段的机制,允许并发操作而不会导致整个字典被锁定。---------如果你在多线程环境中进行操作,并需要高度的并发性和线程安全性,那么 ConcurrentDictionary 是更好的选择。如果在单线程或低并发环境中,Dictionary 可能更为简单且足够高效。

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值