对C#涉及到的数据结构做了一下简单的汇总,若有遗漏,欢迎补充~~
还是以学习为目的,在此只是简单的介绍一下,希望对大家能有所帮助,能力有限为了不误导大家,不做详细深入的解析,还望见谅,非常欢迎大大们补充~~
1. 数组 Array
int[] array = new int[] { };
// 常用,长度固定,需要在初始化时指定长度
// 在内存中是连续的,遍历速度快,增加删除元素慢,即增删慢,改差快
// 增删元素,最好从数组最后一个或第一个位置操作,尽量避免从中间增删
void ArrayTest()
{
//数组比较常用
int[] intArr01 = new int[5];
int[] intArr02 = new int[] { 1, 2, 3, 4, 5 };
int[] intArr03 = new int[5] { 1, 2, 3, 4, 5 };
int[] intArr04 = { 1, 2, 3, 4, 5 };
//多维数组,声明赋值同上
int[,] intArr05 = new int[5, 5];
int[,,] intArr06 = new int[5, 5, 5];
//交错数组,可以理解为元素是int[]的数组
//与多维数组不同的是,子数组长度可以不同
int[][] intArr07 = new int[5][];
intArr07[0] = new int[1];
intArr07[1] = new int[2];
}
C# 数组(Array)
http://www.runoob.com/csharp/csharp-array.html
C# 多维数组
http://www.runoob.com/csharp/csharp-multi-dimensional-arrays.html
C# 交错数组
http://www.runoob.com/csharp/csharp-jagged-arrays.html
C# Array 类
http://www.runoob.com/csharp/csharp-array-class.html
2. 列表 List<T>
List<int> list = new List<int>();
// 常用,与数组互补,长度不固定
// 在内存中不连续,每个元素内存地址分别记录,遍历速度慢,增删速度快,方便从任意插入或删除元素
常用,不多说
3. 字典 Dictionary
Dictionary<int, string> dictionary = new Dictionary<int, string>();
// 常用,采用键值对的方式,key与value一一对应,key不能为空不能重复,value任意
// 长度不固定,根据Key值查找元素,速度较快,增删改查速度都较快,不足之处就是占用内存相对较大
4. 动态数组 ArrayList
ArrayList arrayList = new ArrayList();
// 与数组类似,长度不固定,会自动修改ArrayList长度
// 只要元素类型为object,都可加入到ArrayList,但这样就是有int、float、string多种数据存在一个容器里
// 就需要装箱、拆箱操作,( int a = 10; object obj = (object)a; ),既不安全又耗性能,不推荐使用
http://www.runoob.com/csharp/csharp-arraylist.html
5. 排序列表 SortedList
SortedList<int, string> sortedList = new SortedList<int, string>();
// 与字典相似,键值对的方式,根据key值自动进行排序
void SortedListTest()
{
SortedList<int, string>; sorteList = new SortedList<int, string>();
sorteList.Add(4, "四");
sorteList.Add(1, "一");
sorteList.Add(3, "三");
sorteList.Add(2, "二");
sorteList.Add(5, "五");
foreach (var item in sorteList)
{
Debug.Log(item.Key + " " + item.Value);
}
}
http://www.runoob.com/csharp/csharp-sortedlist.html
6. 排序字典 SortedDictionary
SortedDictionary<int, string> sortedDictionary = new SortedDictionary<int, string>();
// 与SortedList无比相似,按照Key排序:数字>小写字母>大写字母。
异同对比: 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(1);
//定义最后一个元素,返回节点
LinkedListNode<int> lastNode = linkedList.AddLast(4);
//在指定节点之后插入元素
linkedList.AddAfter(firstNode, 2);
//在指定节点之前插入元素
linkedList.AddBefore(lastNode, 3);
//移除元素
linkedList.Remove(3);
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(1, "Test01");
hashtable.Add("2", "Test02");
hashtable.Remove(1);
int count = hashtable.Count;
hashtable.Clear();
//更多方法可查看定义
}
http://www.runoob.com/csharp/csharp-hashtable.html
9. 堆栈 Stack
Stack stack = new Stack();
//先进后出,元素为object
void StackTest()
{
Stack stack = new Stack();
//添加元素
stack.Push(1);
//获取并移除元素,取最后添加的元素
object obj = stack.Pop();
//获取但不移除元素,取最后添加的元素
obj = stack.Peek();
}
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(1);
//获取并移除元素,取最先添加的元素
object obj = queue.Dequeue();
//获取但不移除元素,取最先添加的元素
obj = queue.Peek();
}
http://www.runoob.com/csharp/csharp-queue.html
11. 点阵列 BitArray
BitArray bitArray = new BitArray(10);
// 不常用,元素为bool值
http://www.runoob.com/csharp/csharp-bitarray.html
12. 哈希集 HashSet
HashSet<string> hashSet = new HashSet<string>();
// 不常用,无序列表