C# Hashtable

 

一、数据结构:

HashPrime:是一个固定的素数; 
InitialSize :是哈希表的默认容量; 
count :记录哈希表中的元素总数; 
occupancy: 记录哈希表发生冲突的次数; 
loadsize: 装载容量值,相当于一个阈值,达到了这个数值,将对哈希表进行扩容; 
loadFactor: 哈希表中的元素占有数据桶空间的一个比率,这个比例直接决定了哈希表在什么时候进行扩容; 
buckets:称为数据桶,用于存储哈希表中的元素,它是一个结构体,包含:

1. key:键,键是不能重复的;

2. val:值,可以是任何的类型(想要类型安全可以选择Dictionary,是Hashtable的泛型实现);

3. hash_col:是一个Int32类型,它的最高位是符号位,为“0”时,表示这是一个正整数;为“1”时表示负整数。hash_coll使用最高位表示当前位置是否发生冲突,正数表示未发生冲突;负数表示当前位置存在冲突。之所以专门使用一个位用于存放哈希码并标注是否发生冲突,主要是为了提高哈希表的运行效率。

 

二、冲突处理方法 

通常用于处理冲突的方法有:开放定址法(线性探测,二次探测,伪随机探测)、再哈希法、链地址法、建立一个公共溢出区等。

Dictionary使用的解决冲突方法是拉链法,又称链地址法

Hashtable使用双重散列法解决冲突 (说明:对于线性探测法,当聚焦问题严重或者表接近满时,要搜索一个关键字,往往要逐个检查很多个无关项(先于和搜索关键字匹配的元素插入)。为了解决聚焦问题,提出了双重散列算法,其基本策略和线性探测法一项,唯一不同是:它不是检查冲突位置后的每一个位置,而是采用另一个散列函数产生一个固定的增量。(跳跃式检查和插入,减小聚焦大小))

转载于:https://www.cnblogs.com/fmys/p/9131154.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值