一、数组、ArrayList 和 List<>

数组、ArrayList 和 List,都被用于储存一组数据(对象)。

1、数组(非泛型集合)

数据类型[] 数组名 = new 数据类型[数组长度]

如: string[] array = new string[3];

实例化数组的时候,必须定义数组长度。若不知要储存数据的数量,过度设置数组长度会造成资源浪费。为解决这个问题,推出了ArrayList对象来解决这些问题。

2、ArrayList(非泛型集合)

ArrayList 对象名 = new ArrayList();

ArrayList实例化时,可以不需要定义容量。 ArrayList的容量是动态的,会随着存入数据的数量动态增加容量。

注意到,实例化ArrayList时,没有声明数据类型,ArrayList中插入不同类型的元素是被允许的。ArrayList会把所有插入的元素当做object类型来处理,在实际使用中很容易发生数据类型不匹配的错误,因此ArrayList不是类型安全的。而且在检索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() 将集合的大小设置为集合中元素的实际个数

3、List<>(泛型集合)

List<>类就是ArrayList类的泛型等效类。它的大部分用法与ArrayList相似。

在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。

List<数据类型> 对象名 = new List<数据类型>;

二、Queue队列

Queue队列是一种先进先出,后进后出的数据结构。

Queue 对象名 = new Queue();

使用无参数构造器创建 Queue 的实例,集合的容量是默认初始容量 32 个元素,使用默认的增长因子 。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 对象名 = new Stack();

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

四、Hashtable哈希表(非泛型集合)

哈希表使用键值对(key \ value)的方式存放值。换句话说,在 Hashtable 中存放了两个数组,一个数组用于存放 key 值,一个数组用于存放 value 值。键必须是唯一的,而值不需要唯一的 ,key 和value都是object。
此外,还提供了根据集合中元素的 key 值查找其对应的 value 值的方法。

Hashtable 对象名 = new Hashtable ();

属性或方法 作用
Count 集合中存放的元素的实际个数
void Add(object key,object value) 向集合中添加元素
void Remove(object key) 根据指定的 key 值移除对应的集合元素
void Clear() 清空集合
ContainsKey (object key) 判断集合中是否包含指定 key 值的元素
ContainsValue(object value) 判断集合中是否包含指定 value 值的元素
static void Main(string[] args)
{Hashtable hash = new Hashtable();键值对集合的“键”一定不能重复。(唯一)hash.Add(1, "飞机");hash.Add("xyz",new Person() { Name="猪仔"});判断一个集合中是否存在某个键if (hash.ContainsKey("xyz")){Console.WriteLine("存在");}判断键值对中是否存在某个值if (hash.ContainsValue("飞机")){Console.WriteLine("存在2");}根据键获取值Console.WriteLine(hash[1].ToString());Person pp =hash["xyz"] as Person;Console.WriteLine(pp.Name);遍历Hashtable1.遍历键foreach (object item in hash.Keys){Console.WriteLine("键{0},值{1}",item,hash[item]);}2.遍历值foreach (object item in hash.Values){Console.WriteLine("值:{0}",item);}3.遍历键值对foreach (DictionaryEntry kv in hash){Console.WriteLine("键:{0}   值:{1}",kv.Key,kv.Value);}Console.ReadKey();
}
————————————————
版权声明:本文为CSDN博主「我家有大脸」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Tianwen55/article/details/107102834

五、Dictionary字典(泛型集合)

Dictionary字典同哈希表一样,根据键进行的键值对的集合,不同的是对键值对进行了类型限定。

Dictionary<键类型, 值类型> 对象名 = new Dictionary<键类型, 值类型>();

【C#基础】数据结构相关推荐

  1. Algorithms_基础数据结构(04)_线性表之链表_单向循环链表约瑟夫环问题

    文章目录 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 约瑟夫问题 结构 分析 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 tip:单向链表 约瑟夫问题 N个人围成一圈, ...

  2. Algorithms_基础数据结构(03)_线性表之链表_双向链表

    文章目录 大纲图 双向链表 双向链表的基本结构 双向链表的基本操作 头插 尾插 中间部位插入 删除头部 删除尾部 删除中间位置的数据 查找 更新 Code 总结 大纲图 双向链表 Algorithms ...

  3. OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co

    OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...

  4. 关于SparkMLlib的基础数据结构Spark-MLlib-Basics

    此部分主要关于MLlib的基础数据结构 1.本地向量 MLlib的本地向量主要分为两种,DenseVector和SparseVector,顾名思义,前者是用来保存稠密向量,后者是用来保存稀疏向量,其创 ...

  5. Redis基础数据结构内部实现简单介绍

    5种基础数据结构 Redis有5种基础数据结构,分别是:String(字符串),list(列表),hash(字典),set(集合),zset(有序集合),这五种是我们开发种经常用的到的,是Redis种 ...

  6. python 数据结构包_python 中numpy科学计算工具包——基础数据结构

    认识numpy基础数据结构 # 认识数组 ar = np.array([[1,2,3,4,5],[6,7,8,9,10]]) br = [[1,2,3,4,5],[6,7,8,9,10]] print ...

  7. 你需要知道的基础算法知识——STL和基础数据结构(六)

    引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...

  8. 你需要知道的基础算法知识——STL和基础数据结构(七)

    引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...

  9. 你需要知道的基础算法知识——STL和基础数据结构(五)

    引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...

  10. 你需要知道的基础算法知识——STL和基础数据结构(四)

    引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...

最新文章

  1. bert简介_关于BERT:你不知道的事
  2. 清华大学 lt;现代软件工程gt; 项目小组名单
  3. Java基础---异常---turow和throws
  4. 云熙板式家具参数化拆单软件免锁版_数控开料机拆单软件如何选择?
  5. iOS开发CGRectGetMidX. CGRectGetMidY.CGRectGetMinY. CGRectGetMaxY. CGRectGetMinX. CGRectGetMaxX的使用...
  6. CentOS安装中文man手册
  7. bootstrap 预定义样式风格
  8. 塞班系统微信连接不上服务器,充满情怀的塞班系统:手机QQ、微信将无法登陆使用...
  9. 计算机二级c简介,二级C语言
  10. SGX攻防部分POC
  11. 小工具:找出序列中的极值点
  12. 【毕业设计_课程设计】基于移动设备的眼球追踪技术及其应用(源码+论文)
  13. 固态硬盘读写速度快的原理是什么?
  14. 小程序实现滚动加载(懒加载)
  15. EXCEL VBA 使用正则表达式清洗替换数据
  16. 10060 mysql_MySQL错误:Can't connect to MySQL server (10060) 解决方案
  17. linux ati显卡驱动下载,教你在Linux中安装ATI显卡驱动(图)
  18. 硬件设计——不一二电路设计(电源电路、接口电路、时钟电路)
  19. 重磅 | 分子生物学与遗传学经典名著——《Lewin基因XII》(中译本)
  20. 【阅读随记】《个体崛起·未来生存法则》

热门文章

  1. 想要成为一个游戏美术设计师,需要学习什么?游戏建模教程
  2. 机智云物联网荣获“2021年度广州创新力大奖”
  3. [ 数据结构 -- 手撕排序算法第四篇 ] 选择排序
  4. 直接在内存里计算数据?先做一个内存数据库技术选型吧
  5. 3D模型欣赏:原始部落女神 自带仙气 让人眼前一亮
  6. python3 中文手册Python 入门指南
  7. SEO学习(九)——快速网站诊断(Google网管工具)
  8. python安装盒怎么打开_python盒图
  9. CCF人工智能的A类期刊会议列表
  10. 记第一次实习面试经历(字节跳动)