.NET集合浅析

浅析ADO.NET五大对象 引言在数据库应用系统中,必定要涉及到对数据库的访问和操作,而ADO.NET则是微软在.NET Framework中负责数据访问的类的库集,那么理清ADO.NET中的五大对象对于我们理解ADO.NET无疑会有很大的帮助。本文将对ADO.NET做简单的介绍,分析五大对象Connection、Command、DataReader、DataAdapter、DataSet,以及他们之间的关系。发展早在1997 阅读详情

这个学期看了不少STL的东西,也补充了一些以前没有学过的数据结构知识。回过头来看之前写过的一些Unity脚本,发现在当时在基本只会用向量这一种数据结构的情况下,写出了许多啼笑皆非的代码。比如,当时基本只会什么都用List<>,居然在使用for循环遍历一个List的同时,尝试去删除其中的元素...因此,这里我们打开MSDN,总结一下C#中的集合与数据结构。由于受STL的影响,这里在总结归纳时,免不了与STL中的容器进行了对比。

总的来说,.NET集合分为泛型集合和非泛型集合,前者指的是集合名称后面带<T>的,而后者指ArrayList、Hashtable这种没有类型参数的集合。MSDN指出,使用泛型集合往往具备更好的性能。与STL容器相比,.NET集合的种类稍多、功能也更多,体系组织与完全不同,甚至显得比较杂乱(不过我觉得这大部分是MSDN的锅)。这里整理一下常用的集合,不仿先按照STL容器及实现方式进行分类对应:

(一)顺序容器

1. 向量:List<T> (非泛型集合:ArrayList)

.NET命名和STL体系完全不同,比如这个List就迷惑了我好久,众所周知list是STL中双向链表的名称,到了.NET却变成了向量…之前在无脑写Unity代码时,居然在使用for循环遍历一个List的同时去删除其中的元素…

2. 链表:LinkedList<T>(双向链表)

相比STL中的list统一使用迭代器,.NET的LinkedList<T>还支持一个基于节点的访问方式,使用LinkedListNode<T>类型创建节点的引用,可以通过Next、Previous属性移动指针。这种方法很像用C语言写的原始链表。

3. 队列:Queue<T>

4. 栈:Stack<T>

(二)关联容器

上面是基本的顺序容器,.NET容器的功能和STL是类似的。但到了下面的关联容器,.NET显得有些混乱了,它并没有STL关联容器“三个维度”(集合/字典、是否允许重复元素、是否有序)那样清晰的体系。这里试图找到对应于STL的容器。

5. 散列表:HashSet<T> (集合) Dictionary<TKey,TValue> (字典)

二者基本上对应于STL的unordered_set/unordered_map,即不允许重复元素,内部实现实现基于散列表。另外.NET还有个Hashtable,这个容器MSDN给出的定义是“桶”的集合,加入到其中的key(Hashtable也是字典)必须实现GetHashCode方法和Object.Equals方法。GetHashCode方法用于计算Key的散列码,返回一个整数。

6. 二叉搜索树:SortedSet<T> (集合) SortedList<TKey,TValue> (字典)

基本对应于STL的set/map,内部元素是有序的,仍然不允许元素重复。

7. 奇葩:SortedDictionary<TKey,TValue> (向量字典?)

这是一种STL中没有的集合类型。这个类型即允许循关键码访问,也允许循秩访问。MSDN指出:该集合内部维护了两个列表,分别存储key和value。猜测内部实现应该是value列表按照正常的二叉搜索树实现,是已排序的,这样通过key可以找到对应value,和普通的map无异;而key列表是凭空多出来的,猜测它是一个数组,这样我们可以通过“秩”(即索引)来找到对应的key,再通过这个key按照上述步骤找到value。

到现在为止,我们还没有找到对应于STL关联容器中multi_前缀的集合类型,即允许重复元素的循关键码访问集合。在介绍HashSet<T>时,MSDN给出了下面一段话:“A HashSet<T> collection is not sorted andcannot contain duplicate elements. If order or element duplication is moreimportant than performance for your application, consider using the List<T> class together with the Sort method.”微软的意思似乎是.NET并不提供类似的集合,而是建议通过对List<T>进行排序实现。所以应该怎么做呢?

 

参考文献

1. MSDN:https://docs.microsoft.com/zh-cn/dotnet/standard/collections/

2. 《C++ Primer》

集合net集合net 一个集合.net,致力于操作系统安装之后系统的.net,如其他软件安装需求.net 立即下载

相关推荐

NET Framework 4.5.1 离线安装包_x86_x64

.net4.5.1离线安装包_x86_x64 .net4. .net4.5.1离线安装包_x86_x64,在win7 64位离线安装可以使用

.Net集合详解

前言   前面几篇文章讲了泛型、讲了数组,都有提到集合,这一节重点对集合进行详细解说。本文主要使用各种集合类型。以至于评估其性能,针对不同的场景选择不同的集合使用。 集合分类详解 一、列表   列表的创建 var intList=new List<int>();   创建一个容量为10 的集合 List<int> in...

dingxian9983的博客 963

【详细】芯片设计全流程(包括每个流程需要用到的工具以及需要参与的工作人员)

一颗芯片的诞生经历了设计、制造和测试(分别对应集成电路产业链的设计业、制造业和封测业),而每一步都包含了复杂的步骤和流程。 图0-1 集成电路产业链 现在,我们重点介绍芯片设计的全流程以及每个流程需要用到的设计工具和需要参与的工作人员。 一、IC设计分类 首先对IC设计的分类做个介绍,如图1-1所示。 图1-1 IC设计分类 如图1-1所示,IC设计可以粗分为数字IC设计和射频/模拟IC设计,数字IC设计又可分为ASIC设计和FPGA/CPLD设计,此外还有一部分IC设计.

qq_36045093的博客 8万+

.Net中的集合

所有的集合都是继承自IEnumerable。集合总体可以分为以下几类:关联/非关联型集合,顺序/随机访问集合,顺序/无序集合,泛型/非泛型集合,线程集合。

星火燎猿 2703

SAGA GIS英文版进行地形分析,计算常用的地形因子等

SAGA GIS中文版是一款专业的自动化地球科学分析系统软件。SAGA GIS最新版界面简洁,操作简便,用户使用时输入要分割的影像,选择要计算特征的影像或者波段,设置越大,得到的斑块越大;反之,则越小,点击Okay,得到分割影像图。SAGA GIS中文版主要通过选择适合你影像的格式,加载影像。 SAGA GIS全称是System for Automated Geoscientific Analyses,是一种用于编辑空间数据的地理信息系统(GIS)计算机程序,它是免费的开源软件,SAGA GIS旨在为科学家

qq_35794085的博客 5644

gtsam 学习十(ISAM2 理论)

翻译自:iSAM2: Incremental Smoothing and Mapping Using the Bayes Tree 摘要 提出了一种新型的贝斯树处理稀疏矩阵,在转化为因子图,可以更好的求解平方根信息和映射问题。 文中提出了三个概念 使用概率密度项进行矩阵分解 介绍如何将矩阵分解转换为贝叶斯数和条件概率密度 基于贝叶斯树提供了一种新的系数非线性优化:ISAM2(进行重新排序和重新线性化,避免了批量更新) 问题描述 文章聚焦与如何用增量实时解决非线性问题, 利用增量即新的测量值实时更新估

weixin_37781153的博客 8407

.Net 集合类

.NET 有超过 21 种内置的集合类型,包括很多常用数据结构的并行访问和泛型版本。大 部分程序只需要组合使用这些类就能满足需求,你应该很少会需要创建自己的集合类。 .NETFramework 中有些集合类只是为了保持向后兼容性,在新的代码中绝不应该再去 使用了。具体包括以下几个。 ArrayList。 Hashtable。 Queue。 SortedList。 Stack。 ListDictionary。 HybridDictionary。 ...

scottfan的博客 796

Three.js 完整实战项目:构建一个 3D 商品展示空间

Three.js 作为强大的 WebGL 框架,广泛应用于交互式 3D 场景开发,尤其适合创建沉浸式商品展示空间。本文将通过一个完整的实战项目,展示如何构建一个 3D 商品展示空间,涵盖项目架构、资源组织、多模型切换、交互热点绑定、移动端适配和帧率优化。项目以展示虚拟商品(如家具或电子产品)为核心,结合用户交互,基于 Vite、TypeScript 和 Tailwind CSS,支持 ES Modules,确保响应式布局,遵循 WCAG 2.1 可访问性标准。本文适合希望通过综合项目掌握 Three.js

zimin的专栏 1462

C#.Net筑基-集合知识大全

Net 中提供了一系列的管理对象集合的类型,数组、可变列表、字典等。从类型安全上集合分为两类,和,传统的非泛型集合存储为Object,需要类型转。而泛型集合提供了更好的性能、编译时类型安全,推荐使用。

李赛赛的专栏 1206

【嵌入式DIY实例ESP32篇】-步数计数器

在本项目中,我们将使用 ESP32 微控制器和博世的 BMI160 加速度计陀螺仪模块构建一款便携式计步器

视觉与物联智能 803

SerDes电路的PCB仿真设计规则及策略

SerDes的PCB设计中,重点工作是使用3D 电磁 (EM) 场求解器,进行过孔结构优化,包括 BGA的扇入和扇出区域以及布线的过孔区域,并且,利用连接器供应商提供加密的 3D 模型,进行连接器和 PCB 的级联仿真,最终获取系统级的通道性能参数,如插入损耗、回波损耗、串扰和模式转换、阻抗曲线等,如果发现任何缺陷,再进行进一步优化,这一过程中,推荐进行拆分仿真,以提高设计效率。

一只豌豆象的博客 2192

浅析.NET中的Serialization

摘要 本文简要介绍了.NET中的序列化(Serialization)概念,以及在代码中实作Serialization的方法。文章的最后介绍了Serialization在Clone方法中的运用。   Serialization的概念   Serialization是.NET中一种实现对象持久性(Persistent)的机制。它是一个将对象中的数据转换成一个单一元素(通常是Stre

u011877729的专栏 2152

【目标检测-YOLO】YOLOv5-v5.0-yolov5s网络架构详解(第一篇)

源码:GitHub - ultralytics/yolov5 at v5.0 由于YOLO v5 代码库在持续更新,如上图,有多个版本,每个版本的网络结构不尽相同。以下内容以 v5.0 为准,网络结构选用 yolov5s。 为了方便画图和理解网络结构,选用可视化工具:Netron 网页版进行可视化, 然后使用PPT作图。 在Releases · ultralytics/yolov5 · GitHub找到 v5.0中的Assets 中的yolov5s.pt并下载该权重。 下图为直接......

博观约取,厚积薄发 2万+

[转] 浅析.NET中的Serialization

Serialization的概念 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1403819Serialization是.NET中一种实现对象持久性(Persistent)的机制。它是一个将对象中的数据转换成一个单一元素(通常是Stream)的过程。它的逆过程是Deserialization。Serialization...

dengtaojiu7237的博客 126

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

浅析.NET的反射特性

在.net框架体系内,反射特性较多的应用到。反射的相关定义分为两种。      自然解释:射是一种自然现象,表现为受刺激物对刺激物的逆反应;这是反射的字面解释,我们看一下计算机编程中的反射;      编程解释:通过 System.Reflection 命名空间中的类以及 System.Type,您可以获取有关已加载的程序集和在其中定义的类型(如类、接口和值类型)的信息。 您也可以使用

zhanfu2905的博客 305

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

.NET 框架浅析

经过了对C#较长时间的学习以及实践,不断地感受着.NET 框架——这个最本质,然而却似乎让人捉摸不透的概念。特别是经过拜读Anytao博主的《你必须知道的.NET》文章,使我对其概念关系得以厘清,在此作为回顾,对.NET 框架展开一些论述: .NET 框架概要: .NET框架,即.NET FrameWork ,其本身作为.NET 技术两大方面之一。从狭义角度来讲,即通...

weixin_30894583的博客 79

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

开源博客项目Blog .NET Core源码学习(7:FluentValidation使用浅析)

学习并记录项目中FluentValidation模块的使用方法。

gc_2299的博客 1791

浅析Asp.Net Core框架IConfiguration配置

一、建造者模式(Builder Pattern) 二、核心接口与配置存储本质 三、简易QueryString配置源实现 四、宿主配置与应用配置 五、文件配置源配置更新原理 一、建造者模式 为什么提建造者模式?在阅读.NET Core源码时,时常碰到IHostBuilder,IConfigurationBuilder,ILoggerBuilder等诸如此类带Builder名称的类/接口,起初专研时那是一头愣。知识不够,勤奋来凑,在了解到Builder模式后终于理解,明白这些Builder类是用来构建相对应类的

fewcecwe的博客 1451

ASP.NET的GridView与DataGrid控件比较浅析

ASP.NET的GridView与DataGrid 控件比较都有哪些方面呢?那么下面就开始我们的讲解:GridView 控件是 DataGrid 控件的后继控件。与 DataGrid 控件相似,GridView 控件旨在在 HTML 表中显示数据。当绑定到数据源时,DataGrid 和 GridView 控件分别将 DataSource 中的一行显示为输出表中的一行。DataGrid

mywebstudy的专栏 561

浅析ASP.NET FORUMS中缓存机制的应用

浅析ASP.NET FORUMS中缓存机制的应用在ASP.NET中有三种缓存机制,我在这里主要提到的是ASP.NET FORUMS中使用的缓存API Cache对象Cache对象可以说在ASP.NET FORUMS中无所不在,以SiteUrls()类为例在构造函数中有如下代码if (HttpRuntime.Cache[cacheKey] == null) {  .  .System.Web.C

逛街孔雀的专栏 1093
上一篇: HTC Vive开发学习——VRTK + SteamVR Plugin + Hover UI Kit配置
下一篇: HTC Vive开发学习——VRTK(3)更新到新版本SDK!
fcauto2012
博客等级 码龄11年 59粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值