C#中的HashSet, HashTable, Dictionary的区别

C# -Dictionary、HashTable、List、HashSet区别 我们清楚List是对数组做了一层包装,我们在数据结构上称之为线性表,而线性表的概念是,在内存中的连续区域,除了首节点和尾节点外,每个节点都有着其唯一的前驱结点和后续节点。在内部算法实现上,HashSet的Contains方法复杂度是O(1),List的Contains方法复杂度是O(n),后者数据量越大速度越慢,而HashSet不受数据量的影响。HashSet最大的优势是检索的性能,简单的说它的Contains方法的性能在大数据量时比List好得多。 阅读详情

HashSet和Python中的Set差不多,都是为逻辑运算准备的,HashSet不允许数据有重复,且存入的时单值不是键值对。
HashTable和Dictionary差不多,但是他们的实现方式时不同的,Dictionary俗称字典,里面存放的时键值对,即KeyValuePair,且支持泛型,而HashTable国内一般译为哈希表,但是在我看来,为了更好表达它的本质,翻译为散列表比较好,因为HashTable里面村的key时以散列的方式存储的,但是Dictionary里面是按顺序的方式存的KeyValuePair。

实践了才能记得住,所以此处以LeetCode第500题为例来说明这一点。

public string[] FindWords(string[] words) 
        {
            for(int i=0;i<words.Length;i++)
            {
                words[i] = words[i].ToLower();
            }

            string arr1 = "qwertyuiop";
            string arr2 = "asdfghjkl";
            string arr3 = "zxcvbnm";
            HashSet<int> map1 = new HashSet<int>();
            Dictionary<char, int> map2 = new Dictionary<char, int>();
            Hashtable map3 =new Hashtable();

            for(int i=0;i<arr1.Length;i++)
            {
                map1.Add(i);
                map2.Add(arr1[i], 1);
                map3.Add(arr1[i], 1);
            }
            for(int i=0; i<arr2.Length;i++)
            {
                map1.Add(i);
                map2.Add(arr2[i], 2);
                map3.Add(arr2[i], 2);
            }
            for(int i=0; i<arr3.Length;i++)
            {
                map1.Add(i);
                map2.Add(arr3[i], 2);
                map3.Add(arr3[i], 2);
            }
            int flag = 0;
            List<string> lstStr = new List<string>();
            for(int i=0; i<words.Length;i++)
            {
                flag = 0;
                for(int j=0;j<words[i].Length;j++)
                {
                    if(map2[words[i][0]] != map2[words[i][j]])
                    {
                        flag = 1;
                        break;
                    }

                }
                if(flag == 0)
                    lstStr.Add(words[i]);
            }

            return lstStr.ToArray();
        }

其中map1是HashSet,map2是Dictionary, map3是HashTable,但是若将if判断中的map2改成map3会怎么样呢?看看这一段代码

            object a = 1;
            object b = 1;
            Console.WriteLine(a.GetType());
            if(a==b)
            {
                Console.WriteLine("a==b");
            }

结果是a不等于b,为什么呢,因为他们内容相同但是地址不同,但是将==改为equals的比较就可以了,具体请查阅equals和==的区别(注意这里略绕哦)。

这里面的问题在于HashTable总是把所有变量当成Object所以才会出这个问题,而Dictionary类型则是指定key和value的类型。

另外Dictionary数据结构再单线程使用会比较快,存放值类型的数据也会比HashTable快,这是因为HashTable对于存入的数无论是值类型还是引用类型都会变成object类型关于这一点,再看一个小例子。

别再对着数据手册发愁了!用HFSS 2023 R2搞定ESP32-C3板载天线的阻抗匹配 本文详细介绍了如何利用HFSS 2023 R2进行ESP32-C3板载天线的阻抗匹配优化,解决实际PCB设计中常见的性能偏差问题。通过智能模型导入、科学参数扫描和量化优化流程,显著提升天线性能,适用于WIFI和蓝牙应用场景。 阅读详情

相关推荐

使用 STM32F7 和 TensorFlow Lite 开发低功耗人脸识别设备

我们讨论了 STM32F7 的特点和能力,TensorFlow Lite 在 STM32F7 上的应用,以及一些降低功耗的优化技术。- 准备模型:选择合适的人脸识别模型,在 TensorFlow 中进行训练和导出,并使用 TensorFlow Lite 转换为适用于 STM32F7 的量化模型。请注意,上述代码仅展示了如何加载和运行 TensorFlow Lite 模型的方法,实际应用中需要集成人脸检测和识别模型,并根据实际需求进行相应的输入和输出处理。结合这两个工具,我们可以开发出低功耗的人脸识别设备。

weixin_66608063的博客 2586

C#中Hashtable、Dictionary详解以及写入和读取对比

转自:http://www.th7.cn/Program/net/201304/132789.shtml 另几篇相关文章 深入解析Hashtable、Dictionary、SortedDictionary、SortedList  C# 的几种数据结构的查找率之比较 C#与数据结构--树论--红黑树(Red Black Tree) 采用分离链接法的HashTable的实现

shellching的专栏 1361

sentinel——SLC数据下载、DEM数据下载拼接、精密轨道数据下载方法

Sentinel——SLC数据下载、DEM数据下载、精密轨道数据下载方法 SLC数据下载 网址:https://search.asf.alaska.edu DEM数据下载 1 手动下载 http://srtm.csi.cgiar.org/srtmdata/ 3.在SARscape中使用下载好的DEM 将下载好的DEM放在软件默认下载DEM路径下(默认路径是C:\Users<用户名&g...

u011322358的博客 2万+

C#--哈希表(HashTable)的用法详解、HashTable与Dictionary效率比较

致敬原文 https://www.cnblogs.com/xpvincent/archive/2013/01/15/2860841.html 哈希表(HashTable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写;valu...

VIP_CR的博客 1055

Hypermesh二次开发实战:从Tcl/Tk脚本到Ext API的进阶之路

本文系统介绍了Hypermesh二次开发的进阶路径,从自动化重复操作的Tcl/Tk脚本入门,到利用HMASCII接口深度读写模型数据,最终深入Ext API进行高性能计算与功能定制。通过实战案例,帮助工程师掌握从脚本录制到C++插件开发的完整技能,显著提升CAE前处理效率与自动化水平。

weixin_29306875的博客 670

REST-meta-MDD Data总结

sMRI数据使用:nwc1、nwc2、nwc3(同样数据集相关论坛中有相关信息指向需要使用wc1、wc2、wc3)多方咨询与讨论后决定使用nwc数据,这里说明wc数据相对wc数据要大的多如wc1的大小为1.33GB,而nwc1的数据却有6.90GB。VBM文件:/REST-meta-MDD/Sharing/REST-meta-MDD-VBM- phase1 -Sharing.tar.gz。1、Excel中的表型信息:1-男,2-女;-9999或空白表示缺少数据。

2404_88295660的博客 1532

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

用 Python 和 uiautomation 实现微信批量发送

思路是这样,将要发送的人员名单(包括称呼)以及发送内容都维护到Excel里,程序运行时读取Excel里内容,自动搜索人员姓名(微信昵称或备注名),填入要发送的内容,拼接上称呼(如果需要的话)自动点击发送,这样轮巡直至名单人员全部发送完成。、

jankingdom的专栏 1471

C# HashSet集合类型使用介绍

C#的HashSet很少被使用的集合类型的一些被常用到的方法。

Scalzdp的专栏 2万+

CANOE-介绍 @014-基于CAPL的Someip测试(CANOE 15.0/16.0/17.0)【草稿】发送事件、方法

摘要:本文介绍了使用CANoe 16.0及更高版本配置SOME/IP测试环境的方法,包括硬件连接、工程配置和CAPL代码实现。SOME/IP是一种面向服务的车载通信协议,支持服务发现、事件推送和方法调用。文章详细说明了网络拓扑配置、数据库文件加载等步骤,并提供了CAPL代码示例,展示如何初始化多个应用端点(15个不同端口)和服务实例(73个服务),通过SomeIpOpenLocalApplicationEndpoint和SomeIpCreateProvidedServiceInstance函数实现。配置过程

沿流不止 424

YOLOv11涨点改进 | 首发全网创新、主干改进篇 | AAAI 2026 | PartialNet 主干让 YOLOv11 更加强大!引入部分通道机制 和 部分注意力卷积,全方面提升了模型的性能

本文提出PartialNet主干网络改进YOLOv11的方法,通过部分通道机制(PCM)和部分注意力卷积(PATConv)提升模型效率。PartialNet将特征图通道拆分并应用不同操作,显著减少计算量和内存占用。主要创新包括:1)部分通道机制实现计算优化;2)三种注意力模块(PATch/PATsp/PATsf)增强特征提取;3)动态部分卷积(DPConv)自适应调整计算复杂度。文章详细提供了代码实现和YOLOv11集成方法。

Ai缝合怪、助力小伙伴高效发论文 268

C#数据结构--Dictionary、HashTable、List、HashSet区别

在.Net  模仿java 的过程中,抛弃了 HashMap,所以我们今天分析下Dictionary、HashTable、HashSet区别。 处理碰撞,即碰撞到同一个Bucket槽上: Hashtable和Dictionary从数据结构上来说都属于Hashtable(哈希表),都是对关键字(键值)进行散列操作,将关键字散列到Hashtable的某一个槽位中去,不同的是处理碰撞的方法。散列函数...

qq826364410的专栏 3680

华为OD机试 - TLV格式(Python/JS/C/C++ 2025 C卷 100分)

两端通过TLV格式的报文来通信,现在收到对端的一个TLV格式的消息包,要求生成匹配后的(tag,length,valueOffset)列表。和需要匹配的n个tag对应的n行匹配结果,每一行由长度和偏移量组成。第二行:需要匹配的tag数量n(0 < n < 1000)后面N行:需要匹配n个tag值(十进制表示),递增排列。标签10(0A)存在,长度3,valueOffset=2。标签15(0F)长度4,valueOffset=2。标签14(0E)长度2,valueOffset=8。

学Java,找哪吒 2037

C#中的HashSet, HashTable, Dictionary的区别【转】

HashSet和Python中的Set差不多,都是为逻辑运算准备的,HashSet不允许数据有重复,且存入的时单值不是键值对。 HashTable和Dictionary差不多,但是他们的实现方式时不同的,Dictionary俗称字典,里面存放的时键值对,即KeyValuePair,且支持泛型,而HashTable国内一般译为哈希表,但是在我看来,为了更好表达它的本质,翻译为散列表比较好,因为H...

weixin_34037515的博客 350

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

What's the difference between Dictionary, Hashtable & Hashset?

<br />This is just the reference. Will post the difference late when have time.<br /> http://suebuntu.blogspot.com/2010/06/c-dictionary-hashtable-and-hashset.html

Jeffery的面试题库 690

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Hash(散列表)--C#

在C#中,哈希集合对应的是Hashset;哈希映射对应的是Hashtable和Dictionary。用数组或list存放数据 当访问数据或查找数据时,都需要通过遍历来查找下表获取值,耗时间。而使用Hash存储,是通过哈希函数直接存放元素值,查找迅速,T(n)=O(1)Dictionary是强制类型,更严格,可规定输入数据类型,但不是线程安全的。Hashtable不是强制类型的,key类型都是Object,(HashMap是Jave中的哈希映射实现方式)有两种不同类型的哈希表:哈希集合和哈希映射。

m0_72588269的博客 851

C#编程入门_常用集合_14

List ArrayList

杨勇博客之家 689

C# HashTable、HashSet和Dictionary的区别

C# Hashtable、HashSet和Dictionary的区别

程小智的博客 2861

C# HashTable、HashSet、Dictionary

哈希一、HashTable1.什么是哈希表2.哈希表的Key&Value(1) 添加数据(2) “键值对”均是object类型(3)必须有Key键,且Key键不能重复。(4)乱序读取数据2.基本操作 一、HashTable 1.什么是哈希表 哈希表,也叫散列表,是根绝关键码值(Keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中的一个位置来访问记录,以加快查找速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 2.哈希表的Key&Value (1) 添

世界既不黑也不白,而是一道精致的灰。 1921

C# Hashtable、HashSet和Dictionary的区别

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

yyyyz999的博客 1748

C#常见容器ArrayList、List、HashSet、Hashtable 、Dictionary、Stack、Queue

命名空间ArrayList:是一个使用大小会根据需要动态增加的数组,可以存储任意类型的数据,但是ArrayList存储的都是Object类型,很多时候在存取时需要强制类型转换,引起装箱和拆箱的操作,可能会影响效率。List泛型集合列表:用于存储某一种特定类型的数据,存储的数据可以重复,并且存储的数据是有序的,可以通过下标[]获取。用法在一定程度上比ArrayList更灵活、高效,可以说是最常用的一种容器。......

积累点滴,保持自我 2358

HashTable, Dictionary, HashSet的区别

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

longlonglongway的专栏 437

【C#】常见容器介绍(ArrayList、List、HashSet、Hashtable 、Dictionary、Stack、Queue)

目录一、List< T >泛型集合1.简单介绍:2.简单用法举例:3.注意事项:赋值二、字典Dictionary1.简单介绍:2.简单用法举例:3.注意事项:添加元素,取值,删除元素 一、List< T >泛型集合 1.简单介绍: 命名空间:System.Collections.Generic System.Collections 命名空间里有一个ArrayList,使用大小会根据需要动态增加的数组来实现 System.Collections.IList 接口,ArrayList可以

到底是不是个懒人的博客 2245

c#中List、Dictionary、ArrayList、Hashtable和数组的区别是什么?

<br /><br />C# 集合类 Array Arraylist List Hashtable Dictionary Stack Queue <br />1.数组是固定大小的,不能伸缩。虽然System.Array.Resize这个泛型方法可以重置数组大小, <br />但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!而集合却是可变长的 <br />2.数组要声明元素的类型,集合类的元素类型却是object. <br />3.数组可读可写不能声明只读数组。集合类可以

lijian260的专栏 828

C# ArrayList、HashSet、HashTable、List、Dictionary的区别

在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求。 由于这种限制不方便,所以出现了ArrayList。 ArrayList、List<T> ArrayList是可变长数组,你可以将任意多的数据Add到ArrayList里面。其内部维护的数组,当长度不足时,会自动扩容为原来的两倍。 但是ArrayList也有一个缺点,就是存入ArrayList里面的数...

weixin_30576859的博客 226
上一篇: C#数据结构之链表的总结
下一篇: C#实现和调用WebService
河流儿
博客等级 码龄11年 45粉丝 77原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值