C#数据结构汇总
对C#涉及到的数据结构做了一下简单的汇总,若有遗漏,欢迎补充~~
还是以学习为目的,在此只是简单的介绍一下,希望对大家能有所帮助,能力有限为了不误导大家,不做详细深入的解析,还望见谅,非常欢迎大大们补充~~
1. 数组 Array
int[] array = new int[] { };
// 常用,长度固定,需要在初始化时指定长度
// 在内存中是连续的,遍历速度快,增加删除元素慢,即增删慢,改查快
// 增删元素,最好从数组最后一个或第一个位置操作,尽量避免从中间增删
优点:比如说数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单
缺点:在数组的两个数据间插入数据也是很麻烦的。还有我们在声明数组的时候,必须同时指明数组的长度,数组的长度过长,会造成内存浪费,数组和长度过短,会造成数据溢出的错误。这样如果在声明数组时我们并不清楚数组的长度,就变的很棘手了。
void ArrayTest()
{
//数组比较常用
int[] intArr01 = new int[];
int[] intArr02 = new int[] { , , , , };
int[] intArr03 = new int[] { , , , , };
int[] intArr04 = { , , , , };
//多维数组,声明赋值同上
int[,] intArr05 = new int[, ];
int[,,] intArr06 = new int[, , ];
//交错数组,可以理解为元素是int[]的数组
//与多维数组不同的是,子数组长度可以不同
int[][] intArr07 = new int[][];
intArr07[] = new int[];
intArr07[] = new int[];
}
2. 列表 List<T>
List<int> list = new List<int>();
// 常用,与数组互补,长度不固定
// 在内存中不连续,每个元素内存地址分别记录,遍历速度慢,增删速度快,方便从任意插入或删除元素
1.需要在声明时通过泛型指定类型
2.没有拆箱装箱操作,因此在大多数情况下List要比ArrayList效率高且类型安全
常用,不多说
3. 字典 Dictionary
Dictionary<int, string> dictionary = new Dictionary<int, string>();
// 常用,采用键值对的方式,key与value一一对应,key不能为空不能重复,value任意
// 长度不固定,根据Key值查找元素,速度较快,增删改查速度都较快,不足之处就是消耗内存较大
4. 动态数组 ArrayList
ArrayList arrayList = new ArrayList();
// ArrayList类实际上是Array类的优化版本。与数组类似,长度不固定,会自动修改ArrayList长度
// ArrayList的元素都是object类型的,都可加入到ArrayList, 因此需要进行装箱和拆箱操作,内存分配的代价很高,而Array的元素通常是特定类型的。
// 就需要装箱、拆箱操作,( int a = 10; object obj = (object)a; ),既不安全又耗性能,不推荐使用
C# 动态数组(ArrayList)
http://www.runoob.com/csharp/csharp-arraylist.html
5. 排序列表 SortedList
SortedList<int, string> sortedList = new SortedList<int, string>();
// 与字典相似,键值对的方式,根据key值自动进行排序
C# 排序列表(SortedList)
http://www.runoob.com/csharp/csharp-sortedlist.html
void SortedListTest()
{
SortedList<int, string>; sorteList = new SortedList<int, string>();
sorteList.Add(, "四");
sorteList.Add(, "一");
sorteList.Add(, "三");
sorteList.Add(, "二");
sorteList.Add(, "五");
foreach (var item in sorteList)
{
Debug.Log(item.Key + " " + item.Value);
}
}
6. 排序字典 SortedDictionary
SortedDictionary<int, string> sortedDictionary = new SortedDictionary<int, string>();
// 与SortedList无比相似
异同对比: C# Dictionary, SortedDictionary, SortedList
https://blog.csdn.net/ma_jiang/article/details/78600043
7. 双向链表 LinkedList
LinkedList<int> linkedList = new LinkedList<int>();
// 元素指向前后元素,只能从第一个依次访问
// 插入新元素,只需修改插入位置的前后元素引用即可
void LinkedListTest()
{
LinkedList<int> linkedList = new LinkedList<int>();
//定义第一个元素,返回节点
LinkedListNode<int> firstNode = linkedList.AddFirst();
//定义最后一个元素,返回节点
LinkedListNode<int> lastNode = linkedList.AddLast();
//在指定节点之后插入元素
linkedList.AddAfter(firstNode, );
//在指定节点之前插入元素
linkedList.AddBefore(lastNode, );
//移除元素
linkedList.Remove();
linkedList.RemoveFirst();
linkedList.RemoveLast();
//更多方法可查看定义,在此不一一列举
}
8. 哈希表 Hashtable
Hashtable hashtable = new Hashtable();
// 与字典类似,采用键值对的方式,使用哈希算法进行无序存储
// key、value均为object类型,存储是需要类型转换
void HashtableTest()
{
Hashtable hashtable = new Hashtable();
//hashtable.Add(object key, object value);
hashtable.Add(, "Test01");
hashtable.Add("", "Test02");
hashtable.Remove();
int count = hashtable.Count;
hashtable.Clear();
//更多方法可查看定义
}
C# 哈希表(Hashtable)
http://www.runoob.com/csharp/csharp-hashtable.html
9. 堆栈 Stack
先进后出原则,最先插入的元素最后被访问,最后被插入的元素最先被访问
Stack stack = new Stack();
//先进后出,元素为object
void StackTest()
{
Stack stack = new Stack();
//添加元素
stack.Push();
//获取并移除元素,取最后一位添加的元素
object obj = stack.Pop();
//获取但不移除元素,取最后添加的元素
obj = stack.Peek();
}
C# 堆栈(Stack)
http://www.runoob.com/csharp/csharp-stack.html
10. 队列 Queue
先进先出的原则(类似于管道),最先插入的元素最先被访问,最后插入的元素最后被访问
Queue queue = new Queue();
// 先进先出,与Stack相反,元素为object
void QueueTest()
{
//用法与Stack类似
Queue queue = new Queue();
//添加元素
queue.Enqueue();
//获取并移除元素,取最先添加的元素
object obj = queue.Dequeue();
//获取但不移除元素,取最先添加的元素
obj = queue.Peek();
}
C# 队列(Queue)
http://www.runoob.com/csharp/csharp-queue.html
栈(stack)与队列(Queue)的相同点:
1.都是线性结构。
2.插入操作都是限定在表尾进行。
3.都可以通过顺序结构和链式结构实现。、
栈与队列的不同点:
1.删除数据元素的位置不同,栈的删除操作在表尾进行,队列的删除操作在表头进行。
2.顺序栈能够实现多栈空间共享,而顺序队列不能
3.遍历数据速度不同。
栈只能从头部取数据,也就最先放入的需要遍历整个栈最后才能取出来,而且在遍历数据的时候还得为数据 开辟临时空间,保持数据在遍历前的一致性。
队列则不同,它基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间,因为在遍历的过程中不影像数据结构,速度要快的多
C#中的哈希表和字典的区别
工作以后就会发现,项目中有时候用到哈希表,有时候用到字典表,这两个都是索引、值得表现形式,那么它们的区别在哪里?
以下是笔者总结的区别:
1,单线程里面用字典,多线程里面用哈希表。
2,字典的排序就是按照插入的顺序来的,而哈希表未必是。
3,哈希表允许单线程写入,多线程读取。
4,哈希表最大的优势在于其索引方式,它是经过散列处理过的,在数据量大的时候尤其如此。
C#中为什么字典的查询速度比List快
List实际上是顺序存储的,由于存储结构是顺序的,所以查询起来就很费劲. 但是字典这种数据类型是为了查询做了专门的优化,目的在于快速查找. 所以效率要比List高很多
C#数据结构汇总的更多相关文章
- Python数据结构汇总
Python数据结构汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.线性数据结构 1>.列表(List) 在内存空间中是连续地址,查询速度快,修改也快,但不利于频繁新 ...
- leetcode常见算法与数据结构汇总
leetcode刷题之后,很多问题老是记忆不深刻,因此特意开此帖: 一.对做过题目的总结: 二.对一些方法精妙未能领会透彻的代码汇总,进行时常学习: 三.总结面试笔试常见题目,并讨论最优解法及各种解法 ...
- Python3数据结构汇总
字符 列表 元组 集合 字典 能否被索引或切片 能 能 能 否 否 元素能否被编辑 否 能 否 能 能 增 1.list.append(x):把一个元素添加到列表的结尾: 2.list.insert( ...
- JavaScript 数据结构与算法之美 - 十大经典排序算法汇总(图文并茂)
1. 前言 算法为王. 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手:只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 ...
- PTA数据结构与算法题目集(中文) 7-41PAT排名汇总 (25 分)
PTA数据结构与算法题目集(中文) 7-41PAT排名汇总 (25 分) 7-41 PAT排名汇总 (25 分) 计算机程序设计能力考试(Programming Ability Test,简称P ...
- C语言二级选择题考点汇总-数据结构与算法-【考点一】 什么是算法
1.算法及其基本特征 算法是指对方案的准确描述,是解决问题的执行步骤. 算法不等于数学上的计算方法,也不等于程序.程序是算法的载体. 算法的基本特征如下: (1)可行性:步骤可实现,执行结果可达到 ...
- JS数据结构与算法 - 剑指offer二叉树算法题汇总
❗❗ 必看经验 在博主刷题期间,基本上是碰到一道二叉树就不会碰到一道就不会,有时候一个下午都在搞一道题,看别人解题思路就算能看懂,自己写就呵呵了.一气之下不刷了,改而先去把二叉树的基础算法给搞搞懂,然 ...
- 数据结构与算法C语言所有头文件汇总 —— 持续更新
header.h // 顺序表的结构定义 #define Maxsize 100 //const int Maxsize = 100; // 预先定义一个足够大的常数 typedef struct { ...
- Java数据结构——二叉树的遍历(汇总)
二叉树的遍历分为深度优先遍历(DFS)和广度优先遍历(BFS) DFS遍历主要有: 前序遍历 中序遍历 后序遍历 一.递归实现DFSNode.java: public class Node { pri ...
随机推荐
- C# 中带有中国农历的日期选择控件
开源一款自己刚开始接触 C# 时开发的带有农历信息的日期选择控件,记得那时还是在2010年的寒假期间做的这个东西.刚开始接触 C# 时,使用WinForm来开发桌面程序,觉得简直是简单又迅速,由于 C ...
- MyEclipse8.6启动后提示内存不足的解决方案(亲测,完美解决)
转自:http://www.bubuko.com/infodetail-1625857.html 最近可能由于公司项目大了,启动MyEclipse后经常提示内存不足的警告框,如下: 其实点击close ...
- nested exception is java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml}
Deploying inside Eclipse v3.6 raises the exception. The WEB-INF/classes/ folder in the .war doesn't ...
- numpy中的ndarray方法和属性
原文地址 NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是 ...
- 网页截图API接口,一键自动生成网页截图
背景 最近在开发一个小程序,其中有一个帮助模块,内容为帮助文章列表,文章内容为网站后台编辑的富文本格式.鉴于小程序的特殊性,其对html格式的富文本支持并不友好. 刚开始有人开发了wxparse插件, ...
- Java Thread系列(九)Master-Worker模式
Java Thread系列(九)Master-Worker模式 Master-Worker模式是常用的并行设计模式. 一.Master-Worker 模式核心思想 Master-Worker 系统由两 ...
- 如何规范移动应用交互设计?UI/UX设计师须知的11个小技巧
以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具. 十年前,手机的使用只是为了沟通. 而近几年,情况发生了很大变化,我们很难找到不使用手机的人.手机在极 ...
- vs2012
https://www.microsoft.com/zh-CN/download/confirmation.aspx?id=36020
- SSL握手通信详解及linux下c/c++ SSL Socket代码举例
SSL握手通信详解及linux下c/c++ SSL Socket代码举例 摘自:http://www.169it.com/article/3215130236.html 分享到:8 发布时 ...
- IRC聊天指南
参考https://www.cnblogs.com/fzzl/archive/2011/12/26/2302637.html