C#中的HashTable与Dictionary小结

C#中的哈希表(Hashtable) 综上所述,字典(Dictionary)是哈希表(Hashtable)的一个泛型版本,它提供了类型安全的键值对存储,并在性能上通常更好。哈希表是一种强大的数据结构,可以用于解决各种问题,例如存储和查找大量的数据,构建缓存等。然而,需要注意的是,哈希表不保证元素的顺序,因此无法按照插入的顺序或者其他特定的顺序进行遍历。哈希表(Hashtable)和字典(Dictionary)在 C# 中都是用于存储键值对的数据结构,但它们有一些区别。方法向哈希表中添加键值对。键和值可以是任意类型,只要它们是唯一的和可比较的。 阅读详情

引言: 网上搜集了一些资料,针对C#中的HashTable用法进行总结,方便日后查阅。

哈希函数是基于键返回数值哈希代码的算法。键是正被存储的对象的某一属性的值。哈希函数必须始终为相同的键返回相同的哈希代码。一个哈希函数能够为两个不同的键生成相同的哈希代码,但从哈希表检索元素时,为每一唯一键生成唯一哈希代码的哈希函数将令性能更佳。


   在 Hashtable 中用作元素的每一对象必须能够使用 GetHashCode 方法的实现为其自身生成哈希代码。但是,还可以通过使用接受 IHashCodeProvider 实现作为参数之一的 Hashtable 构造函数,为 Hashtable 中的所有元素指定一个哈希函数。
  

     在将一个对象添加到 Hashtable 时,它被存储在存储桶中,该存储桶与匹配该对象的哈希代码的哈希代码关联。在 Hashtable 内搜索一个值时,将为该值生成哈希代码,并且搜索与该哈希代码关联的存储桶。


   例如,一个字符串的哈希函数可以采用该字符串中每一字符的 ASCII 代码并它们添加到一起来生成一个哈希代码。字符串“picnic”将具有与字符串“basket”的哈希代码不同的哈希代码;因此,字符串“picnic”和“basket”将处于不同的存储桶中。与之相比,“stressed”和“desserts”将具有相同的哈希代码并将处于相同的存储桶中。


   Dictionary 类与 Hashtable 类的功能相同。对于值类型,特定类型(不包括 Object)的 Dictionary 的性能优于 Hashtable,这是因为 Hashtable 的元素属于 Object 类型,所以在存储或检索值类型时通常发生装箱和取消装箱操作

Hashtable 对象由包含集合元素的存储桶组成。存储桶是 Hashtable 中各元素的虚拟子组,与大多数集合中进行的搜索和检索相比,存储桶可令搜索和检索更为便捷。每一存储桶都与一个哈希代码关联,该哈希代码是使用哈希函数生成的并基于该元素的键。

1.Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。

2.Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.

3.哈希表的简单操作:

(1)在哈希表中添加一个keyvalue键值对:HashtableObject.Add(key,value);

(2)在哈希表中去除某个keyvalue键值对:HashtableObject.Remove(key);

(3)从哈希表中移除所有元素: HashtableObject.Clear();

(4)判断哈希表是否包含特定键key: HashtableObject.Contains(key);

下面控制台程序将包含以上所有操作:

using System;

usingSystem.Collections; file使用Hashtable时,必须引入这个命名空间

class hashtable

{

publicstatic void Main()

{

Hashtableht=new Hashtable(); file创建一个Hashtable实例

ht.Add(E,e);添加keyvalue键值对

ht.Add(A,a);

ht.Add(C,c);

ht.Add(B,b);string s=(string)ht[A];

if(ht.Contains(E))file判断哈希表是否包含特定键,其返回值为true或false

Console.WriteLine(theE keyexist);

ht.Remove(C);移除一个keyvalue键值对

Console.WriteLine(ht[A]);此处输出a

ht.Clear();移除所有元素

Console.WriteLine(ht[A]);file此处将不会有任何输出

}

}

4.遍历哈希表遍历哈希表需要用到DictionaryEntry Object,代码如下:

for(DictionaryEntryde in ht) ht为一个Hashtable实例

{

Console.WriteLine(de.Key);de.Key对应于keyvalue键值对key

Console.WriteLine(de.Value);de.Key对应于keyvalue键值对value

}

5.对哈希表进行排序对哈希表进行排序在这里的定义是对keyvalue键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用一种变通的做法:

ArrayListakeys=new ArrayList(ht.Keys); file别忘了导入System.Collections

akeys.Sort(); file按字母顺序进行排序

for(string skey inakeys)

{

Console.Write(skey+ );

Console.WriteLine(ht[skey]);排序后输出

}

 

LVGL实战 透视卡盘 八张卡立在一个圆柱面上,摄像机在柱心前方。每帧对屏幕上的每个像素发一条射线,与卡片所在平面求交,得到三维交点,再投影回卡片自己的二维坐标系取样。透视、倾斜、近大远小、相互遮挡 —— 全部是这一步的副产物。 阅读详情

相关推荐

LaTeX伪代码字体大小调整全攻略:从algorithm到algorithm2e的实战技巧

本文详细介绍了在LaTeX中调整伪代码字体大小的全面技巧,涵盖algorithm、algorithmicx和algorithm2e等主流算法包的使用方法。从基础命令到高级配置,帮助用户解决学术论文和技术文档中的伪代码排版问题,提升算法展示的专业性和可读性。特别针对不同期刊格式要求,提供了实用的字体调整方案。

weixin_29297127的博客 437

HashTable与Dictionary(转)

HashTable与Dictionary(转) HashTable与Dictionary Hashtable 和 Dictionary <K, V> 类型1:单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分.2:多线程程序中推荐使用 Hashtable, 默认的 Hashtab...

weixin_30838873的博客 360

win10下Miracast无线投屏使用教程及异常解决方案(超详细)

文章目录一、什么是Miracast?二、主流的无线投屏技术有哪些特点?三、如何查看自己的win10电脑是否支持Miracast无线投屏功能?四、win10电脑如何使用Miracast无线投屏功能? 一、什么是Miracast? Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的3C设备(如智能手机、电视、投影、电脑等...

帅气的小白的博客 44万+

C#中的Hashtable(哈希表)详解

一、Hashtable(哈希表)Hashtable(哈希表)是一种重要的集合类型。Hashtable通常称为哈希表,它表示键值对的集合,这些键/值对根据键的哈希代码进行组织。它的每个元素都是一个存储在DictionaryEntry对象中的键/值对。键不能为空引用,但值可以。

wenchm的博客 9358

深入RK3588嵌入式Linux开发:uboot源码定制化移植实战

本文详细介绍了RK3588嵌入式Linux开发中,如何绕过庞大的官方SDK,从官方仓库获取纯净U-Boot源码并进行定制化移植的完整实战流程。内容包括编译环境搭建、交叉工具链配置、源码结构解析、设备树(Device Tree)修改、环境变量定制、编译脚本编写以及常见问题调试技巧,旨在帮助开发者深入理解系统引导过程,掌握为定制硬件适配U-Boot的核心技能。

weixin_29169505的博客 423

SpringBoot整合oceanbase,实现oracle无缝切换到oceanbase

随着去“IOE”化的潮流,近些年来,许多与国家相关的项目不约而同到地往”国产化“方向靠拢,不可避免地,一些项目可能需要进行数据库迁移。

4623

C# Hashtable

可能有些没遇到过这种情况的初学者不好理解线程安全的意思,在多线程时,a、b两条线程都访问同一个Dictionary对象,在a线程中,会不断的因为业务操作,去修改Dictionary对象的值,而b线程想要时刻获取这些值,以为得到的跟a改变后的是一样的,但实际却不同。6.Hashtable是无序的,读取时,它并不按照你加入的先后顺序读出来。3.在读取速度方面,Dictionary要快一些,原因可能是装箱拆箱的损耗。类型安全,是指装箱拆箱,即把对象转为object,或者把object转为对象。

以梦为马 不负韶华 2096

告别‘耀斑’降落:手把手教你用PX4+激光测距仪实现固定翼精准自动着陆

本文详细介绍了如何利用PX4飞控与激光测距仪实现固定翼无人机的精准自动着陆,解决传统气压计在低空环境下的测量误差问题。通过硬件选型、安装要点、PX4参数配置及实战调校,帮助开发者实现厘米级高度感知,优化降落曲线,提升着陆稳定性与安全性。

weixin_30336061的博客 520

C#中哈希表(HashTable)的用法详解以及和Dictionary比较

C#中哈希表(HashTable)的用法详解以及和Dictionary比较 1. 哈希表(HashTable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key...

以梦为马 不负韶华 4904

告别版本冲突!在Ubuntu 20.04上优雅实现ROS Noetic与ROS2 Foxy双环境切换

本文详细介绍了在Ubuntu 20.04系统上实现ROS Noetic(ROS1)与ROS2 Foxy双环境共存与切换的完整方案。通过智能脚本设计和工作空间隔离,解决了版本冲突问题,帮助开发者高效管理不同ROS版本项目。特别适合需要同时开发ROS1和ROS2应用的机器人开发者。

weixin_28452161的博客 411

南大计算机2024保研笔试:编译原理等5门专业课考点分布与408复习避坑指南

本文详细解析了南京大学计算机2024保研笔试的考点分布与复习策略,重点突出编译原理(占比28%-32%)和离散数学的特色考核。提供跨课程复习方法、真题题型分析及高效备考建议,帮助考生突破传统408框架,应对南大独特的命题风格。

weixin_29304985的博客 345

c# Dictionary跟Hashtable的对比

c#里不支持动态对象, 无法像AS3一样定义一个动态的对象, 添加动态的属性。 例如像AS3里 要传递一系列参数, 临时对象的话,通常会用 var o:Object = {id:"1",name:"aaa"}; 在c#里,字典系统的构建之前已经试用了Dictionary来充当参数的临时载体, 但是看了itween的插件后, 使用的是Hashtable来充当。 于是对Dictio...

weixin_30896763的博客 115

STM32 TIM3硬件XOR+复位模式实现霍尔信号精准捕获

霍尔传感器是电机控制系统中获取转子位置的关键器件,其三路数字信号需通过高精度、低延迟的边沿检测机制转换为电角度信息。其核心原理在于利用定时器输入XOR逻辑合并多路信号,并结合从模式复位(Reset Mode)实现硬件级时间间隔测量——每次跳变强制计数器清零,使CNT值直接表征换相周期。该方案规避了软件轮询的不确定性,显著提升FOC控制的实时性与鲁棒性。典型应用场景包括BLDC/FOC电机驱动、机器人关节伺服及工业变频器设计,尤其适用于STM32F4系列等具备硬件XOR与从模式控制器的MCU平台。

weixin_28931507的博客 92

笔记:C#_数据结构_性能对比:List、LinkedList、Dictionary

Created with Raphaël 2.2.0开始array 数组arraylist 动态数组list 列表queue 队列stack 堆栈linkedlist 链表hashtable 哈希表dictionary 字典hashset 哈希集sortedset 排序集结束 1.1 ArrayList ArrayList 是一个特殊数组, 通过添加和删除元素就可以动态改变数组的长度。 ArrayList集合相对于数组的优点: 支持自动改变大小, 可以灵活的插入元素, 可以灵活的删除元素, 可以灵活的访

HadesNyx 5254

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

c#数组与集合

数组在内存中是连续存储的,所以索引速度很快,增删改元素也很简单。但是数组是分配在一块连续的数据空间上的,因此分配空间的同时就必须确定好空间的大小,空间的连续也导致增删改及存储元素的效率很低。如在数组中添加元素,就需在内存空间中“腾出”一块地方,别的元素再往后“cuan”位置。还有在声明数组时,必须指定数组长度,长也不好短也不行,怎么办?于是集合出现了。 ArrayList示例: stati...

weixin_34301132的博客 127

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【Unityc#专题篇】之c#进阶篇

【本站最全系列】(c#系统化学习宝典)—精华图文提炼核心

秩沅 7806

C#集合小结

System.Collections中可以直接使用的集合类有: 1)ArrayList 实现了接口:IList、ICollection、IEnumerable ArrayList 类:使用大小可按需动态增加的数组。 ArrayList把所有元素都当作object对象引用,因而在访问ArrayList的元素时要进行类型转换 优点:动态改变大小、灵活方便的插入和删除元素、可排序 缺点:插入

似水流年 684

javascript模拟实现类似c#下的hashtable的简单功能

越来越感觉js对集合的处理没有c#强大。比如在实际开发中,经常用到在一维数组或者二维数组里取某一个满足某些条件的项,通常的处理方式就是遍历数组,对比条件,匹配就取出,然后结束循环。如果在c#中,我们只要用hashtable或者dictionary根据key取value的特性,就可以很轻松地实现这个功能了。其实我们稍作处理,js也可以实现类似hashtab...

weixin_33989780的博客 97

C#的Hashtable 类使用说明

C#的Hashtable 类使用说明

零点工程师的博客 1162

c# 哈希表(Hash Table)

除了 `Dictionary`,C# 中还有其他一些实现哈希表的类,例如 `Hashtable` 类,但 `Dictionary` 更常用、更推荐使用。在哈希表中,每个键都经过哈希函数计算得到一个哈希码(hash code),然后根据哈希码确定其在内部数据结构中的存储位置。然而,由于哈希碰撞(即不同键具有相同哈希码)的存在,实际实现中需要解决冲突的问题,常见的方法包括开放寻址法和链表法。在 C# 中,哈希表(Hash Table)是一种基于哈希函数实现的数据结构,用于存储键值对。

csdn_aspnet的专栏,请点击博客主页右上角三个点中的私信联系 2335

【c#】C#中的哈希表(HashTable)详解

哈希表是一种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点很多,无论是从哈希表中有多少数据,插入和删除只需要接近常量的时间即0(1)的时间级。实际上,这只需要几条机器指令。     对于哈希表的使用者--人来说,这是一瞬间的事。哈希表运算得非常快,在计算机程序中,如果需要在一秒钟内查找上千条记录通常使用哈希表(例如拼写检查器)哈希表的速度明显比树快,树的操作通常需要0

知世俗而不世俗 8570

C#中哈希表(HashTable)的用法详解

1. 哈希表(HashTable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的...

weixin_33963189的博客 594

C# 哈希表Hashtable

然后,通过Add方法向哈希表中添加元素,键值对分别为“key1”和“value1”、“key2”和“value2”、“key3”和“value3”。接着,通过哈希表的索引器,获取了键“key1”和“key2”对应的值,并更新了键“key3”对应的值。以上示例中,通过创建Hashtable对象,添加了三个键值对,分别为"name"和"Alice"、"age"和20、"city"和"New York"。接着,使用索引器通过键获取值,修改键对应的值,并使用Remove方法删除键值对。

無限進步的全棧遊戲開發的博客 1403

Java中 Hashmap转为Dictionary

java hashmap怎么转Dictionary

weixin_42638570的博客 473

C#如何使用哈希表(Hashtable)?用法示例和指南

哈希表是基于键的哈希码排列的键/值对的集合。换句话说, 哈希表用于创建使用哈希表进行存储的集合。它通常通过计算每个键的哈希码来优化查找, 并自动将其存储到另一个存储篮中, 并且当你当时从哈希表访问值时, 它会将哈希码与指定的键进行匹配。这是非通用类型的集合, 在系统集合命名空间。 重要事项: 在Hashtable中, 键不能为null, 但值可以为null。 在哈希表中, 键对象必须是不可变的, 只要它们在哈希表中用作键即可。 哈希表的容量是哈希表可以容纳的元素数。 哈希表中的每个键对象都

u014240783的专栏 7590

C# Hashtable 与 Dictionary的不同

C# Hashtable 与 Dictionary的不同 Hashtable 与 Dictionary 区别 1.Hashtable添加的元素是object类型,而Dictionary添加的是指定(T)类型。 2.Dictionary有泛型的优势,读取速度较快,容量利用更加充分。 3.在foreach循环中,Dictionary可以取到子对象,而Hashtable不可以。 哈希表 Hashtable 使用Hashtable需要引入命名空间System.Collections。Hashtable中key/

Wilhelm的博客 2624
上一篇: 菜鸟第一次做产品小结
下一篇: 值得推荐的经典电影
疯疯爱吃辣
博客等级 码龄15年 25粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值