【C#基础】数据结构
一、数组、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#基础】数据结构相关推荐
- Algorithms_基础数据结构(04)_线性表之链表_单向循环链表约瑟夫环问题
文章目录 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 约瑟夫问题 结构 分析 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 tip:单向链表 约瑟夫问题 N个人围成一圈, ...
- Algorithms_基础数据结构(03)_线性表之链表_双向链表
文章目录 大纲图 双向链表 双向链表的基本结构 双向链表的基本操作 头插 尾插 中间部位插入 删除头部 删除尾部 删除中间位置的数据 查找 更新 Code 总结 大纲图 双向链表 Algorithms ...
- OpenCV学习笔记(四十一)——再看基础数据结构core OpenCV学习笔记(四十二)——Mat数据操作之普通青年、文艺青年、暴力青年 OpenCV学习笔记(四十三)——存取像素值操作汇总co
OpenCV学习笔记(四十一)--再看基础数据结构core 记得我在OpenCV学习笔记(四)--新版本的数据结构core里面讲过新版本的数据结构了,可是我再看这部分的时候,我发现我当时实在是看得太马 ...
- 关于SparkMLlib的基础数据结构Spark-MLlib-Basics
此部分主要关于MLlib的基础数据结构 1.本地向量 MLlib的本地向量主要分为两种,DenseVector和SparseVector,顾名思义,前者是用来保存稠密向量,后者是用来保存稀疏向量,其创 ...
- Redis基础数据结构内部实现简单介绍
5种基础数据结构 Redis有5种基础数据结构,分别是:String(字符串),list(列表),hash(字典),set(集合),zset(有序集合),这五种是我们开发种经常用的到的,是Redis种 ...
- 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 ...
- 你需要知道的基础算法知识——STL和基础数据结构(六)
引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...
- 你需要知道的基础算法知识——STL和基础数据结构(七)
引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...
- 你需要知道的基础算法知识——STL和基础数据结构(五)
引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...
- 你需要知道的基础算法知识——STL和基础数据结构(四)
引言 STL是C++的标准模板库,竞赛中很多常用的数据结构.算法在STL中都有,熟练地掌握它们在很多题目中能极大地简化编程. STL包括容器(container).迭代器(iterator).空间配置 ...
最新文章
- bert简介_关于BERT:你不知道的事
- 清华大学 lt;现代软件工程gt; 项目小组名单
- Java基础---异常---turow和throws
- 云熙板式家具参数化拆单软件免锁版_数控开料机拆单软件如何选择?
- iOS开发CGRectGetMidX. CGRectGetMidY.CGRectGetMinY. CGRectGetMaxY. CGRectGetMinX. CGRectGetMaxX的使用...
- CentOS安装中文man手册
- bootstrap 预定义样式风格
- 塞班系统微信连接不上服务器,充满情怀的塞班系统:手机QQ、微信将无法登陆使用...
- 计算机二级c简介,二级C语言
- SGX攻防部分POC
- 小工具:找出序列中的极值点
- 【毕业设计_课程设计】基于移动设备的眼球追踪技术及其应用(源码+论文)
- 固态硬盘读写速度快的原理是什么?
- 小程序实现滚动加载(懒加载)
- EXCEL VBA 使用正则表达式清洗替换数据
- 10060 mysql_MySQL错误:Can't connect to MySQL server (10060) 解决方案
- linux ati显卡驱动下载,教你在Linux中安装ATI显卡驱动(图)
- 硬件设计——不一二电路设计(电源电路、接口电路、时钟电路)
- 重磅 | 分子生物学与遗传学经典名著——《Lewin基因XII》(中译本)
- 【阅读随记】《个体崛起·未来生存法则》