C# 集合

2023-11-17

数组是一种指定长度和数据类型的对象,在实际应用中有局限性
集合正是为这种局限性而生的,集合的长度能根据需要更改,也允许存放任何数据类型的值

集合简介

集合和数组比较类似,都用于存放一组值,但集合中提供了特定的方法直接操作集合中的数据,并提供了不同的集合来实现特定的功能。

所有集合类或与集合相关的接口命名空间都是 System.Collection,在该命名空间中提供的常用接口如下表所示。

接口名称 作用
IEnumerable 用于迭代集合中的项,该接口是一种声明式的接口
IEnumerator 用于迭代集合中的项,该接口是一种实现式的接口
ICollection .NET 提供的标准集合接口,所有的集合类都会直接或间接地实现这个接口
IList 继承自 IEnumerable 和 ICollection 接口,用于提供集合的项列表,并允许访问、查找集合中的项
IDictionary 继承自 IEnumerable 和 ICollection 接口,与 IList 接口提供的功能类似,但集 合中的项是以键值对的形式存取的
IDictionaryEnumerator 用于迭代 IDictionary 接口类型的集合

针对上表中的接口有一些常用的接口实现类,如下表所示。

类名称 实现接口 特点
ArrayList ICollection、IList、IEnumerable、ICloneable 集合中元素的个数是可变的,提供添加、删除等方法
Queue ICollection、IEnumerable、ICloneable 集合实现了先进先出的机制,即元素将在集合的尾部添加、在集合的头部移除
Stack ICollection、IEnumerable、ICloneable 集合实现了先进后出的机制,即元素将在集合的尾部添加、在集合的尾部移除
Hashtable IDictionary、ICollection、IEnumerable、 ICloneable 等接口 集合中的元素是以键值对的形式存放的,是 DictionaryEntry 类型的
SortedList IDictionary、ICollection、IEnumerable、 ICloneable 等接口 与 Hashtable 集合类似,集合中的元素以键值对的形式存放,不同的是该集合会按照 key 值自动对集合中的元素排序

ArrayList

动态数组,最常用的集合,与数组操作方法类似。
与数组不同的是ArrayList可以在指定索引位置添加或一处项目,动态数组会自动调整他的大小。
同样ArrayList也允许在列表中动态内存分配,添加,搜索,排序各项
创建ArrayList对象需要使用该类的构造方法:

构造方法 作用
ArrayList() 创建实例,集合容量为初始容量
ArrayList(ICollection c) 创建 ArrayList 的实例,该实例包含从指定实例中复制的元素,并且初始容量与复制的元素个数相同
ArrayList(int capacity) 创建 ArrayList 的实例,并设置其初始容量

举个栗子:

ArrayList listl=new ArrayList();
ArrayList list2=new ArrayList(listl);
ArrayList list3=new ArrayList(10);

ArrayList常用方法

属性或方法 作用
int Add(object value) 向集合中添加 object 类型的元素,返回元素在集合中的下标
void AddRange(ICollection c) 向集合中添加另一个集合 c
Capacity 属性,用于设置或获取集合中可以包含的元素数量
void Clear() 从集合中清除所有元素
bool Contains(Object item) 判断集合中是否含有 item 元素,若含有该元素则返回 True, 否则返回 False
void CopyTo(Array array) 从目标数组 array 的第 0 个位置开始,将整个集合中的元素复制到类型兼容的数组 array 中
void CopyTo(Array array,int arraylndex) 从目标数组 array 的指定索引 arraylndex 处,将整个集合中的元素赋值到类型兼容的数组 array 中
void CopyTo(int index,Array array,int arrayIndex,int count) 从目标数组 array 的指定索引 arrayindex 处,将集合中从指定索引 index 开始的 count 个元素复制到类型兼容的数组 array 中
Count 属性,用于获取集合中实际含有的元素个数
int IndexOf(object value) 返回 value 值在集合中第一次出现的位置
int IndexOf(object value,int startIndex) 返回 value 值在集合的 startindex 位置开始第一次出现的位置
int IndexOf(object value,int startIndex,int count) 返回 value 值在集合的 startindex 位置开始 count 个元素中第一次出现的位置
int LastIndexOf(object value) 返回 value 值在集合中最后一次出现的位置
int LastIndexOf(object value,int startIndex) 返回 value 值在集合的 startindex 位置开始最后一次出现的位置
int LastIndexOf(object value,int startIndex,int count) 入元素 value值在集合的 startindex 位置开始 count 个元素中最后一次出现的位置
void Insert(int index,object value) 返回 value 向集合中的指定索引 index 处插
void InsertRange(int index,ICollection c) 向集合中的指定索引 index 处插入一个集合
void Remove(object obj) 将指定兀素 obj 从集合中移除
void RemoveAt(int index) 移除集合中指定位置 index 处的元素
void RemoveRange(int index,int count) 移除集合中从指定位置 index 处的 count 个元素
void Reverse() 将集合中的元素顺序反转
void Reverse(int index,int count) 将集合中从指定位置 index 处的 count 个元素反转
void Sort() 将集合中的元素排序,默认从小到大排序
void Sort(IComparer comparer) 将集合中的元素按照比较器 comparer 的方式排序
void Sort(int index,int count,IComparer comparer) 将集合中的元素从指定位置 index 处的 count 个元素按照比较器 comparer 的方式排序
void TrimToSize() 将集合的大小设置为集合中元素的实际个数

Queue 队列

队列是一种常见的数据结构之一,是先进先出的一种结构。尾部进,头部出。

常用的构造方法

构造方法 作用
Queue() 创建队列Queue实例,集合的容量默认32个元素 ,使用默认的增长因子
Queue(ICollection col) 创建 Queue 的实例,该实例包含从指定实例中复制的元素,并且初始容量与复制的元素个数、增长因子相同
Queue(int capacity) 创建 Queue 的实例,并设置其指定的元素个数,默认增长因子
Queue(int capacity, float growFactor) 创建 Queue 的实例,并设置其指定的元素个数和增长因子

注:增长因子是指当需要扩大容量时,以当前的容量(capacity)值乘以增长因子(growFactor)的值来自动增加容量。
举个栗子:

//第 1 中构造器
Queue queueq1 = new Queue();
//第 2 中构造器
Queue queueq2 = new Queue(queue1);
//第 3 中构造器
Queue queueq3 = new Queue(30);
//第 4 中构造器
Queue queueq4 = new Queue(30, 2);

Queue常用的属性和方法

属性或方法 作用
Count 属性,获取 Queue 实例中包含的元素个数
void Clear() 清除 Queue 实例中的元素
bool Contains(object obj) 判断 Queue 实例中是否含有 obj 元素
void CopyTo(Array array, int index) 将 array 数组从指定索引处的元素开始复制到 Queue 实例中
object Dequeue() 移除并返回位于 Queue 实例开始处的对象
void Enqueue(object obj) 将对象添加到 Queue 实例的结尾处
object Peek() 返回位于 Queue 实例开始处的对象但不将其移除
object[] ToArray() 将 Queue 实例中的元素复制到新数组
void TrimToSize() 将容量设置为 Queue 实例中元素的实际数目
IEnumerator GetEnumerator() 回循环访问 Queue 实例的枚举数

Stack 堆栈

Stack堆栈是常用的数据结构之一,是先进后出的一种数据机构。

Stack提供的三种构造方法

构造方法 作用
Stack() 使用初始容量创建 Stack 的对象
Stack(ICollection col) 创建 Stack 的实例,该实例包含从指定实例中复制的元素,并且初始容量与复制的元素个数、增长因子相同
Stack(int capacity) 创建 Stack 的实例,并设置其初始容量

Stack常用的属性和方法

属性或方法 作用
Push(object obj) 向栈中添加元素,也称入栈
object Peek() 用于获取栈顶元素的值,但不移除栈顶元素的值
object Pop() 用于移除栈顶元素的值,并移除栈顶元素
Clear() 从 Stack 中移除所有的元素
Contains(object obj) 判断某个元素是否在 Stack 中
object[] ToArray() 复制 Stack 到一个新的数组中

Hashtable 哈希表(散列表)

Hashtable 类实现了 IDictionary 接口,集合中的值都是以键值对的形式存取的。
Hashtable 称为哈希表,也称为散列表,在该集合中使用键值对(key/value)的形式存放值。
Hashtable常用构造方法:
Hashtable xxx = new Hashtable();
Hashtable 类中常用的属性和方法

常用的方法和属性 作用
Count 集合中存放的元素的实际个数
void Add(object key,object value) 向集合中添加元素
void Remove(object key) 根据指定的 key 值移除对应的集合元素
void Clear() 清空集合
ContainsKey (object key) 判断集合中是否包含指定 key 值的元素
ContainsValue(object value) 判断集合中是否包含指定 value 值的元素

使用 Hashtable 时能同时存放 key/value 的键值对,由于 key 值是唯一的,因此可以根据指定的 key 值查找 value 值。

SortedList类:有序列表

结构与方法与Hashtable类似:但是为有序列表,按照 key 值对集合中的元素排序
举个栗子:

  SortedList sortedList = new SortedList();
        sortedList.Add(3,"q");
        sortedList.Add(2,"q");
        sortedList.Add(1,"q");
        foreach (DictionaryEntry a in sortedList) {
            Console.WriteLine(a.Key+"" + a.Value);
        }
        sortedList.Clear();
        sortedList.Add(3, "q");
        sortedList.Add(2, "w");
        sortedList.Add(4, "e");
        foreach (DictionaryEntry a in sortedList)
        {
            Console.WriteLine(a.Key + "" + a.Value);
        }

输出:在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 集合 的相关文章

  • 芯片手册中的英文的表示含义

    芯片手册中的英文的表示含义 在读芯片的数据手册的时候 会有一些英文表示不知道是什么含义 现在整理了一些在下面 1 ppm 在一些电压芯片数据手册里 有一个描述基准性能的直流参数 称为温度漂移 也称温度系数 或简称TC Temperature
  • 机器学习之朴素贝叶斯: sklearn.naive_bayes

    朴素贝叶斯 sklearn naive bayes 1 贝叶斯原理 2 朴素贝叶斯 3 朴素贝叶斯模型 3 1 多项式模型MultinomialNB 3 2 高斯模型GaussianNB 3 3 伯努利模型BernoulliNB 4 skl
  • Python爬虫之爬取CSDN人工智能栏目的文章

    在进行正式开始爬虫之旅前 我们要认识几个Python库 urllib2 Python标准库 该库中提供了一系列针对url的操作方法 re Python标准库 提供了一系列针对字符串匹配的方法 BeautifulSoup4 最主要的功能是从网
  • 【推荐算法】双塔模型介绍

    双塔模型的结构不仅在推荐领域的召回和粗排环节中被广泛采用 而且在其它领域 如文档检索 问答系统等都有它的应用场景 我们常说的双塔模型的结构 并不是一个固定不变的网络 而是一种模型构造思路 即把模型分成用户侧模型和物品侧模型两部分 然后用互操
  • LaTeX公式、图片编辑中的常见问题(字体、对齐、编号等)

    类似博文 https blog csdn net u011698800 article details 109456028 输入保留符号 LaTeX中有许多字符都有特殊的意义 LaTeX中的保留字符有 这些在正文中都不能直接呈现 反斜杠用
  • C++数据结构X篇_02_线性表基本概念(线性表是零或者多个数据元素的有限序列;有顺序,有限,类型必须相同;线性表是具有相同类型n个数据元素的有限序列(a0,a1,...an)ai是表项,n是表长度)

    接上篇C 数据结构X篇 01 数据结构的基本概念 本篇将会学习线性表的基本概念 线性表的基本概念 1 线性表的基本概念 1 1 线性表的基本概念 1 1 1 线性表的特性 1 2 线性表的数学定义 1 2 1 线性表的性质 1 3 线性表的
  • 好家伙谷歌翻译又不能用了(有效解决方法)

    今天打开idea想翻译单词发现谷歌翻译又又又挂了 为什么挂掉 可能是那个ip节点太多人用了 我也不懂我就是一个小白 不bb了说一下解决方法 一 手动Ping可以连接的ip 这里我使用的是 https ping chinaz com 然后我们
  • 适合有编程基础的人看的《韩顺平零基础30天学java》笔记(374~397)

    写在最前边 研究生一枚 为后端实习和未来工作打基础 无意间发现韩顺平老师的课程 细心细致 讲课和吴恩达老师一样 都是保姆式讲解 各种基础知识都会补充 爱了 韩顺平老师课程地址 https www bilibili com video BV1
  • 眼底图像血管增强与分割--(2)Gabor滤波算法原理及实现

    在http blog csdn net piaoxuezhong article details 78213672中介绍了匹配滤波算法用于血管分割 本篇继续介绍血管分割的另一种方法 Gabor滤波算法 具体可以参见论文 Retinal Ve
  • 大律法(OTSU) ——图像数据二值化

    二值化的目的 是确定一个像素值 以像素为分界 将图像划分为前景和背景 前景的像素值取相同值 背景的像素也取相同值 从而将前景和背景的差异 在图像中最大化 或者说可以突出前景或者背景信息 二值化可以有效的降低噪声 并且可以一定程度的增强目标特
  • 数据结构刷题:第十六天(基础)

    目录 一 颜色分类 1 单指针 复杂度分析 2 双指针 复杂度分析 二 合并区间 1 排序 思路 看题解 一 颜色分类 75 颜色分类 力扣 LeetCode https leetcode cn problems sort colors p
  • HDU-2000

    题目本身不难 但是对于初学者 难的是数据的读入 方法一 使用getchar 去除每一行的空格符 include
  • git撤回push代码方法 分支受保护 不受保护时 详解

    git撤回push代码方法 分支受保护 不受保护时 详解 1 分支受保护时用revert 1 先说结果 如果分支受保护 那么就不能reset方法来撤回 原因后面说 那么需要通过revert来撤回 2 可以的方法 git revert能够生成
  • STL中的排序算法一览[By ACM郭老师]

    这篇文章我很喜欢 是郭老师的新作 希望大家喜欢 详细的从算法的效率方面来说明了排序算法 STL中有多种排序算法 各有各的适用范围 下面听我一一道来 I 完全排序 sort 首先要隆重推出的当然是最最常用的sort了 sort有两种形式 第一
  • python知识系列:os.path.listdir的坑

    问题描述 os path listdir在返回中文路径时 返回的是0xd4等非gbk或utf 8格式的编码 不知道具体编码格式是什么 E Projects PythonProjects DirectorySearchTest 3918L E
  • 【C++历险记】面向对象

    个人主页 兜里有颗棉花糖 欢迎 点赞 收藏 留言 加关注 本文由 兜里有颗棉花糖 原创 收录于专栏 C 之路 本专栏旨在记录C 的学习路线 望对大家有所帮助 希望我们一起努力 成长 共同进步 目录 一 多继承以及菱形继承 二 多继承引发的问
  • 优加DaaS背后,看见新的营销潮

    DaaS 融合开放 这是京东云优加对外传递出来的两个最清晰的声音 前者对应的是能力和边界 后者对应的是态度和打法 两者结合 恰构成了京东云优加 或者说京东在营销侧的未来想象力 作者 皮爷 出品 产业家 今年我们有接近60 以上的营销费用花在
  • Sublime Text 工具安装&配置

    一 安装 官网下载 https www sublimetext com download Windows 下载下来为exe安装程序 portable version 下载下来为zip压缩包 解压后无需安装就能运行 二 安装插件 插件官网 h
  • HIT--ICS计算机系统大作业

    目录 摘要 第1章 概述 1 1 Hello简介 1 2 环境与工具 1 3 中间结果 1 4 本章小结 第2章 预处理 2 1 预处理的概念与作用 2 2在Ubuntu下预处理的命令 2 3 Hello的预处理结果解析 2 4 本章小结
  • 伪类和伪元素的区别?

    前言 伪类和伪元素是CSS中的两种特殊方式 可以对HTML元素添加一些不同于普通选择器样式的显示效果 它们的实现方法类似 但其意义和使用方式有所不同 伪类 Pseudo Class 是在 CSS3 中引入的 用于描述元素的一些动态的和行为相

随机推荐

  • 蓝桥杯接龙数列(动态规划)

    蓝桥杯2023年第十四届省赛真题 接龙数列 C语言网 dotcpp com 我们要求最少删除多少个数 可以使剩下的序列是接龙序列 那么找到一条最长的接龙数列即可求出最少删除的个数 运用动态规划的思想 从前往后挨个考虑每个数字 一个前缀为6的
  • 五分钟带你了解Python基础知识【精华】

    Python基础知识详解 一 Python输出 1 repr 或 str 转成字符串 2 字符串填充空格进行格式化 3 a 使用 ascii s 使用 str 和 r 使用 repr 可以用于在格式化某个值之前对其进行转化 二 Python
  • .NET/C# 随机不重不漏的输出一个集合中的元素

    一 介绍 1 Random Random 类是一个产生伪随机数字的类 介绍 https docs microsoft com en us dotnet api system random redirectedfrom MSDN view n
  • C++primer习题3.14 vector读写字符

    include
  • sentinel-3卫星测高学习资料整理

    在学习过程中 整理关于sentinel 3测高的学习资料 1 SAR Radar Altimeter SRAL instrument specifics https eumetsatspace atlassian net wiki spac
  • pandas中DataFrame 数据合并,连接(merge,join,concat)

    pandas作者Wes McKinney 在 PYTHON FOR DATA ANALYSIS 中对pandas的方方面面都有了一个权威简明的入门级的介绍 但在实际使用过程中 我发现书中的内容还只是冰山一角 谈到pandas数据的行更新 表
  • Ubuntu16.04如何调整屏幕分辨率至1920*1080

    1 引言 ubuntu16 04桌面版安装好后 发现屏幕分辨率调整选项里没有1920x1080这一选项 经过一番研究 可通过如下方式进行屏幕分辨率设置 以下操作均在ubuntu16 04桌面版操作 不要用远程连接操作 否则xrandr命令会
  • 华为OD机试(2021-04)题目一

    题目 一个 0 1000 的整数 拆解为一个 本身 或多个连续自然数的和 按照自然数的个数从少到多输出各个方案 input solution 方案内的自然数按照从小到大排列 public static void main String ar
  • 循环“停止”的三种特殊语句

    对于一个初学者来说 循环的控制无疑是一个难点和重点 但是在有些时候循环是不需要执行完的 或者这个循环的这一次是不用执行的 那么我们如何来实现这些功能呢 下面通过一个例子来加以说明 1 break语句跳出就近的一层循环 while i lt
  • 渗透相关问题(3)

    1 sql注入绕过的方法 注释符号绕过 大小写绕过 内联注释绕过 双写关键字绕过 特殊编码绕过 宽字节绕过 2 WAF常用的类型 硬件设备类型 软件产品类型 基于云的WAF 3 sql注入漏洞防御方法 代码层面 对输入进行严格的转义和过滤
  • JavaSE学习总结:异常处理

    Java异常处理 1 什么是异常 2 异常的处理机制的原理 过程 3 异常的体系结构 1 java lang Throwable 2 java lang Error 3 java lang Exception 4 异常的处理机制 1 抛 2
  • 以太坊区块链技术开发岗位面试题集锦,附答案

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 超过100道以太坊区块链开发技术岗位的面试题 附参考答案 面试题目涵盖 以太坊的基本概念 Geth客户端使用 智能合约基本概念 Solidity开发语言 去中心化 应用DA
  • 目标检测中的IOU和CIOU原理讲解以及应用(附测试代码))

    上期讲解了目标检测中的三种数据增强的方法 这期我们讲讲目标检测中用来评估对象检测算法的IOU和CIOU的原理应用以及代码实现 交并比IOU 交并比IOU Interp over union 在目标检测任务中 我们用框框来定位对象 如下图定位
  • Linux文件/proc/net/tcp

    导语 proc net tcp文件提供了tcp的连接信息 是由net ipv4 tcp ipv4 c中的tcp4 seq show 实现信息打印的 本文内容来源于linux官方文档proc net tcp txt 官方文档解释 proc n
  • 输入框不能为空格

    需求 在表单中 输入的内容要去除两端空格 技术栈 vue elementui 最简单的做法 element ui 中自带的表单必填项校验输入空格时 依然能逃过验证 required true还是可以通过 需要再 在v model 加上 tr
  • 3.Jmeter学习_线程组(Thread Group)

    xxxx
  • VS2022安装qt插件

    1 安装Qt软件 Qt下载网址 5 14之后的需要手动编译 官方不提供exe文件 2 配置环境变量 3 安装插件 vs2022 qt vsaddin插件已经更新 可以下载安装 链接 https download qt io developm
  • 【正点原子STM32连载】第十七章 通用定时器中断实验 摘自【正点原子】APM32F407最小系统板使用指南

    1 实验平台 正点原子stm32f103战舰开发板V4 2 平台购买地址 https detail tmall com item htm id 609294757420 3 全套实验源码 手册 视频下载地址 http www openedv
  • python爬虫学习笔记-jQuery

    jQuery介绍 jQuery是什么 jQuery是一个快速 简洁的JavaScript框架 jQuery设计的宗旨是 write Less Do More 即倡导写更少的代码 做更多的事情 它封装JavaScript常用的功能代码 提供一
  • C# 集合

    数组是一种指定长度和数据类型的对象 在实际应用中有局限性 集合正是为这种局限性而生的 集合的长度能根据需要更改 也允许存放任何数据类型的值 集合简介 集合和数组比较类似 都用于存放一组值 但集合中提供了特定的方法直接操作集合中的数据 并提供