C#資料結構彙總
對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.htmlC# 多維陣列 http://www.runoob.com/csharp/csharp-multi-dimensional-arrays.htmlC# 交錯陣列 http://www.runoob.com/csharp/csharp-jagged-arrays.htmlC# 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無比相似
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>();
// 不常用,無序列表