博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Hashtable
阅读量:5256 次
发布时间:2019-06-14

本文共 791 字,大约阅读时间需要 2 分钟。

 

一、数据结构:

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

你可能感兴趣的文章
中文系统 上传file的input显示英文
查看>>
android permission
查看>>
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
.net 文本框只允许输入XX,(正则表达式)
查看>>
android smack MultiUserChat.getHostedRooms( NullPointerException)
查看>>
[置顶] Linux终端中使用上一命令减少键盘输入
查看>>
03 线程池
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
jquery的contains方法
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
桥接模式-Bridge(Java实现)
查看>>
303. Range Sum Query - Immutable
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
前台freemark获取后台的值
查看>>
Spring-hibernate整合
查看>>
exit和return的区别
查看>>
Django 相关
查看>>
Python(软件目录结构规范)
查看>>
codeforces水题100道 第二十二题 Codeforces Beta Round #89 (Div. 2) A. String Task (strings)
查看>>