目錄
一,非泛型集合
1,ArrayList
(1)創建和初始化ArrayList()
(2)常用方法
①Add(value)
②AddRange(value)
③Insert(index,value)
④Remove(value)
⑤RemoveAt(index)
⑥clear()
⑦Contains(value)
⑧IndexOf(value)
⑨Sort()
⑩Reverse()
(3)總結
2,Hashtable
(1)創建Hashtable
(2)常用方法
①Add()
②ContainsKey(value)
③containsValue(value)
④Remove(Key)
⑤clear()
⑥keys屬性
⑦values屬性
⑧索引器
(3)總結
二,泛型集合
1,List
(1)創建List的兩種方式
①創建一個空的List
②使用初始化器創建List
(2)List常用方法
①Add(value)
②Insert(index,value)
③Remove(value)
④RemoveAt(index)
⑤clear()
⑥contains(value)
⑦IndexOf(value)
⑧Count
⑨Sort()
⑩Reverse()
2,Dictionary,value>
(1)創建Dictionary的兩種方式
①創建一個空的Dictionary
②使用初始化器創建并初始化Dictionary
(2)常用方法和屬性
①Add(key,value)
②containskey(key)
③containsValue(value)
④Remove(key)
⑤clear()
⑥Count
⑦索引器
(3)遍歷字典
3,Queue
(1)創建隊列
(2)常用方法和屬性
(3)遍歷隊列
4,Stack
(1)創建棧
(2)常用方法和屬性
(3)遍歷棧
5,HashSet
(1)創建HashSet
(2)常用方法
(3)遍歷HashSet
6,SortedList,>
(1)SortedList的基本特性
(2)常用方法和屬性
(3)遍歷SortedList
三,總結
集合是用于存儲,管理和操作數據的容器,集合提供了不同的數據結構和方法,方便對數據進行增、刪、查、改等操作。
C#提供了多種集合類型,分為兩大類:
1,非泛型集合:如ArrayList,Hashtable等
2,泛型集合:如List<T>,Dictionary<Key,Value>,Queue<T>,stack<T>,HashSet<T>, SortedList<Key,Value>等
(1)List<T>:動態數組,存儲任意類型的數據嗎,支持按索引訪問
(2)Dictionary<key,value>:鍵值對集合,每個元素有一個鍵和一個值組成
(3)Queue<T>:隊列,先進先出
(4)Stack<T>:棧,后進后出
(5)HashSet<T>:無重復元素的集合,常用于判斷集合中是否存在某個元素
(6)SortedList<key,value>:按鍵排序的鍵值對集合
一,非泛型集合
常見的非泛型集合:
1,ArrayList
動態數組,允許存儲不同的類型的元素,位于System.Collections命名空間下,大小可以動態變化,類似數組,但可以在運行時調整其大小,ArrayList具有類似數組的功能,但是同時允許動態增加和刪除元素
(1)創建和初始化ArrayList()
可以通過不同的方式來創建ArrayList
例:
using System;using System.Collections;class Program
{static void Main(){// 創建一個空的 ArrayListArrayList list1 = new ArrayList();// 使用初始容量創建 ArrayListArrayList list2 = new ArrayList(10); ?// 初始容量為 10// 從數組創建 ArrayListint[] numbers = { 1, 2, 3, 4, 5 };ArrayList list3 = new ArrayList(numbers);// 使用集合初始化ArrayList list4 = new ArrayList { 10, "Hello", 3.14, true };// 輸出初始化的 ArrayListConsole.WriteLine("list4:");foreach (var item in list4){Console.WriteLine(item);}}}
輸出
list4:
10
Hello
3.14
True
(2)常用方法
①Add(value)
向ArrayList中添加一個元素
例:
ArrayList list = new ArrayList();
list.Add(10);
list.Add("Hello");
Console.WriteLine(list[0]); // 輸出:10
Console.WriteLine(list[1]); // 輸出:Hello
②AddRange(value)
向ArrayList中添加一個集合中的所有元素
例:
ArrayList list1 = new ArrayList() { 1, 2, 3 };
ArrayList list2 = new ArrayList() { 4, 5, 6 };
list1.AddRange(list2);
Console.WriteLine(string.Join(", ", list1)); ?// 輸出:1, 2, 3, 4, 5, 6
③Insert(index,value)
在指定的位置插入元素
例:
ArrayList list = new ArrayList() { 1, 2, 4 };
list.Insert(2, 3); // 在索引 2 位置插入元素 3
Console.WriteLine(string.Join(", ", list)); ?// 輸出:1, 2, 3, 4
④Remove(value)
從ArrayList中刪除第一次出現的指定的元素
例:
ArrayList list = new ArrayList() { 1, 2, 3, 4, 5 };
list.Remove(3); // 刪除元素 3
Console.WriteLine(string.Join(", ", list)); ?// 輸出:1, 2, 4, 5
⑤RemoveAt(index)
刪除指定索引位置的元素
例:
ArrayList list = new ArrayList() { 1, 2, 3, 4 };
list.RemoveAt(1); // 刪除索引 1 處的元素
Console.WriteLine(string.Join(", ", list)); ?// 輸出:1, 3, 4
⑥clear()
刪除ArrayList中的所有元素
例:
ArrayList list = new ArrayList() { 1, 2, 3, 4 };
list.Clear();
Console.WriteLine(list.Count); ?// 輸出:0
⑦Contains(value)
判斷ArrayList中是否包含指定的元素
例:
ArrayList list = new ArrayList() { 1, 2, 3, 4 };
Console.WriteLine(list.Contains(3)); ?// 輸出:True
Console.WriteLine(list.Contains(5)); ?// 輸出:False
⑧IndexOf(value)
返回指定元素在ArrayList中第一次出現的位置,如果元素不存在則返回-1
例:
ArrayList list = new ArrayList() { 1, 2, 3, 4 };
Console.WriteLine(list.IndexOf(3)); ?// 輸出:2
Console.WriteLine(list.IndexOf(5)); ?// 輸出:-1
⑨Sort()
對ArrayList中的元素進行排序(默認升序)
例:
ArrayList list = new ArrayList() { 4, 2, 1, 3 };
list.Sort();
Console.WriteLine(string.Join(", ", list)); ?// 輸出:1, 2, 3, 4
⑩Reverse()
將ArrayList中元素順序反轉
例:
ArrayList list = new ArrayList() { 1, 2, 3, 4 };
list.Reverse();
Console.WriteLine(string.Join(", ", list)); ?// 輸出:4, 3, 2, 1
(3)總結
優點:動態大小,可以自動擴展,可以存儲任意類型的數據
缺點:ArrayList性能較低,因為它是非泛型集合,在增刪操作時都需要進行裝箱和拆箱操作,所以目前一般推薦使用List<T>來替代ArrayList
2,Hashtable
Hashtable位于System.Collections命名空間下,它存儲的是鍵值對(key-value)形式的數據,類似于字典,每個鍵(key)在Hashtable中必須是唯一的,而值(value)可以重復
Hashtable可以通過鍵來快速的查找對應的值,它實現了哈希表數據結構,提供了高效的查找,插入和刪除操作
(1)創建Hashtable
例:
using System;using System.Collections;class Program
{static void Main(){// 創建一個空的 HashtableHashtable hashtable = new Hashtable();// 使用 Add 方法添加鍵值對hashtable.Add("name", "John");hashtable.Add("age", 30);hashtable.Add("country", "USA");// 通過索引器直接添加hashtable["city"] = "New York";// 輸出內容Console.WriteLine("Name: " + hashtable["name"]);Console.WriteLine("Age: " + hashtable["age"]);Console.WriteLine("Country: " + hashtable["country"]);Console.WriteLine("City: " + hashtable["city"]);}}
輸出
Name: John
Age: 30
Country: USA
City: New York
(2)常用方法
①Add()
添加鍵值對,如果鍵已存在,則會拋出異常
例:
Hashtable hashtable = new Hashtable();
hashtable.Add("name", "Alice");
hashtable.Add("age", 25);
②ContainsKey(value)
判斷Hashtable中是否包含指定的鍵
例:
bool contains = hashtable.ContainsKey("name");
Console.WriteLine(contains); ?// 輸出:True
③containsValue(value)
判斷Hashtable中是否包含指定的值
例:
bool containsValue = hashtable.ContainsValue(25);
Console.WriteLine(containsValue); ?// 輸出:True
④Remove(Key)
根據鍵刪除指定的鍵值對,如果鍵不存在,則什么也不做
例:
hashtable.Remove("age");
Console.WriteLine(hashtable.ContainsKey("age")); ?// 輸出:False
⑤clear()
清空所有鍵值對
例:
hashtable.Clear();
Console.WriteLine(hashtable.Count); ?// 輸出:0
⑥keys屬性
獲取Hashtable中所有的鍵
例:
foreach (var key in hashtable.Keys)
{
????Console.WriteLine(key); ?// 輸出所有鍵
}
⑦values屬性
獲取所有的值
例:
foreach (var value in hashtable.Values)
{
????Console.WriteLine(value); ?// 輸出所有值
}
⑧索引器
使用索引器來訪問指定鍵的值
例:
Console.WriteLine(hashtable["name"]); ?// 輸出:"Alice"
(3)總結
與ArrayList類似,性能較低,推薦使用泛型的Dictionary<Key,Value>來代替
二,泛型集合
泛型集合在定義集合時可以指定元素的類型,而不需要在代碼中提前確定具體的類型
1,List<T>
List<T>位于System.Collections.Generic命名空間下,它表示一個動態數組,與 ArrayList類似,推薦使用List<T>
(1)創建List<T>的兩種方式
①創建一個空的List
using System;using System.Collections.Generic;class Program{static void Main(){List<int> numbers = new List<int>(); ?// 創建一個空的 List<int>// 向 List 中添加元素numbers.Add(10);numbers.Add(20);numbers.Add(30);// 輸出所有元素foreach (var number in numbers){Console.WriteLine(number);}}}
②使用初始化器創建List<T>
例:
using System;using System.Collections.Generic;class Program{static void Main(){List<int> numbers = new List<int> { 10, 20, 30 }; ?// 創建并初始化 List<int>// 輸出所有元素foreach (var number in numbers){Console.WriteLine(number);}}}
(2)List常用方法
①Add(value)
向List中添加元素
例:
List<int> numbers = new List<int>();
numbers.Add(10); ?// 向列表中添加數字 10
②Insert(index,value)
在指定索引處插入元素,其他元素后移
例:
numbers.Insert(1, 15); ?// 在索引 1 處插入數字 15
③Remove(value)
移除List<T>中第一次出現的指定元素
例:
numbers.Remove(15); ?// 移除值為 15 的元素
④RemoveAt(index)
移除指定索引位置的元素
例:
numbers.RemoveAt(0); ?// 移除索引 0 處的元素
⑤clear()
移除List中的所有元素
例:
numbers.Clear(); ?// 清空列表
⑥contains(value)
檢查List是否包含指定的元素
例:
bool contains = numbers.Contains(10); ?// 檢查是否包含值 10
Console.WriteLine(contains); ?// 輸出:True
⑦IndexOf(value)
返回指定元素的位置,如果不存在,返回-1
例:
int index = numbers.IndexOf(20); ?// 返回值 20 的索引
Console.WriteLine(index); ?// 輸出:1
⑧Count
獲取List中元素的數量
例:
int count = numbers.Count; ?// 獲取列表的元素數量
Console.WriteLine(count); ?// 輸出:2
⑨Sort()
對List中的元素排序
例:
numbers.Sort(); ?// 對數字列表進行排序
⑩Reverse()
對List中的元素進行反轉
例:
numbers.Reverse(); ?// 反轉列表中的元素
2,Dictionary<Key,Value>
Dictionary位于System.Collection.Generic命名空間下,與上面講的Hashtable類似,也是一個基于鍵值對的集合,可以提供快速的查找,插入和刪除操作(時間復雜度為O(1)),相比上面的Hashtable,推薦使用Dictionary。不過由于使用哈希表實現,字典的元素存儲時是無序的,如果需要有序的字典,可以使用SortedDictionary<Key,Value>
(1)創建Dictionary的兩種方式
①創建一個空的Dictionary
using System;using System.Collections.Generic;class Program{static void Main(){Dictionary<int, string> dict = new Dictionary<int, string>(); ?// 創建一個空字典// 向字典中添加元素dict.Add(1, "Apple");dict.Add(2, "Banana");dict.Add(3, "Cherry");// 輸出所有鍵值對foreach (var kvp in dict){Console.WriteLine("Key: {kvp.Key}, Value: {kvp.Value}");}}}
②使用初始化器創建并初始化Dictionary
using System;using System.Collections.Generic;class Program
{static void Main(){Dictionary<int, string> dict = new Dictionary<int, string>{{ 1, "Apple" },{ 2, "Banana" },{ 3, "Cherry" }};// 輸出所有鍵值對foreach (var kvp in dict){Console.WriteLine("Key: {kvp.Key}, Value: {kvp.Value}");}}}
(2)常用方法和屬性
①Add(key,value)
向字典中添加一個新的鍵值對,如果鍵已經存在,則會拋出異常
例:
dict.Add(4, "Date"); ?// 向字典中添加新的鍵值對
②containskey(key)
判斷字典中是否包含指定的鍵
例:
bool contains = dict.ContainsKey(2); ?// 檢查字典中是否包含鍵為 2 的項
Console.WriteLine(contains); ?// 輸出:True
③containsValue(value)
檢查字典是否包含指定的值
例:
bool contains = dict.ContainsValue("Banana"); ?// 檢查字典中是否包含值 "Banana"
Console.WriteLine(contains); ?// 輸出:True
④Remove(key)
根據給出的鍵移除字典中的鍵值對,如果鍵不存在,則返回false
例:
bool removed = dict.Remove(3); ?// 移除鍵為 3 的項
Console.WriteLine(removed); ?// 輸出:True
⑤clear()
移除字典中的所有鍵值對
例:
dict.Clear(); ?// 清空字典
⑥Count
獲取字典中鍵值對的數量
例:
int count = dict.Count; ?// 獲取字典中的元素個數
Console.WriteLine(count); ?// 輸出:2
⑦索引器
根據鍵來訪問字典中對應的值,如果不存在,拋出異常
例:
string value = dict[1]; ?// 獲取鍵為 1 的值
Console.WriteLine(value); ?// 輸出:Apple
(3)遍歷字典
可以通過foreach循環遍歷字典,前面使用的遍歷不做說明
foreach (var kvp in dict)
{
????Console.WriteLine("Key: {kvp.Key}, Value: {kvp.Value}");
}
3,Queue<T>
也就是隊列,原則是先進先出,位于System.Collections.Generic命名空間下,它的特點是先進先出
(1)創建隊列
Queue<T> queue = new Queue<T>();
(2)常用方法和屬性
①Enqueue(value):向隊列的末尾添加一個元素
②Dequeue():從隊列的開頭移除并返回此元素,如果隊列為空,報錯
③Peek():返回隊列的第一個元素,但不移除它,如果隊列為空,報錯
④Count:獲取隊列中當前元素的數量
⑤clear():移除隊列的所有元素
⑥Contains(value):檢查隊列中是否包含指定的元素
⑦ToArray():將隊列的元素復制到一個新的數組中
(3)遍歷隊列
在遍歷時用foreach
例:
Queue<int> queue = new Queue<int>();
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
foreach (var item in queue)
{
????Console.WriteLine(item); ?// 輸出:1, 2, 3
}
4,Stack<T>
也就是棧,原理是后進后出,位于System.Collections.Generic命名空間下,常用于 函數調用棧,表達式求值等場景
(1)創建棧
Stack<T> stack = new Stack<T>();
(2)常用方法和屬性
①Push(value):將元素壓入棧頂
②Pop():移除并返回棧頂的元素,如果棧頂為空,報錯
③Peek():返回棧頂元素,但不移除它,如果棧為空,報錯
④Count:獲取棧中當前元素的數量
⑤clear():移除棧中所有元素
⑥Contains(value):檢查棧中是否包含指定的元素
⑦ToArray():將棧的元素復制到一個新數組中
(3)遍歷棧
通過foreach遍歷棧
例:
Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
stack.Push(3);
foreach (var item in stack)
{
????Console.WriteLine(item); ?// 輸出:3, 2, 1
}
5,HashSet<T>
HashSet是一個基于哈希表的集合類,它存儲不重復的元素,位于System.Collections.Generic命名空間下,常用于需要快速查找和去重的元素
HashSet中的元素的是唯一的,不能有重復的元素,如果嘗試添加重復元素將會失敗,同時HashSet中的元素沒有特定的順序,因此它不會像List一樣可以按索引訪問元素,不過由于哈希表的實現,HashSet提供了非常快的查找、添加和刪除操作(時間復雜度通常為O(1))
(1)創建HashSet
HashSet<T> set = new HashSet<T>();
(2)常用方法
①Add(value):向集合中添加元素,如果元素已經存在,返回false,添加成功, 返回true
②Remove(value):從集合中刪除指定的元素,如果元素不存在,返回false, 刪除成功則返回true
③Contains(value):檢查集合中是否包含指定的元素
④Count:獲取集合中的元素的數量
⑤clear():移除集合中的所有元素
⑥UnionWith(HashSet other):用另一個集合中元素更新當前集合,形成并集, 集合中將包含兩個集合中的所有元素,但不重復
例:
HashSet<int> set1 = new HashSet<int> { 1, 2, 3 };
HashSet<int> set2 = new HashSet<int> { 3, 4, 5 };
set1.UnionWith(set2); ?// set1 變為 { 1, 2, 3, 4, 5 }
⑦IntersectWith(HashSet other):用另一個集合中的元素更新當前集合,形成交集
⑧ExceptWith(HashSet other):從當前集合中刪除在另一個集合中存在的元素, 形成差集
例:
HashSet<int> set1 = new HashSet<int> { 1, 2, 3 };
HashSet<int> set2 = new HashSet<int> { 3, 4, 5 };
set1.ExceptWith(set2); ?// set1 變為 { 1, 2 }
(3)遍歷HashSet
HashSet<T>是無序集合,因此遍歷時元素的順序不可預測,可以使用foreach 循環遍歷
例:
HashSet<int> set = new HashSet<int> { 1, 2, 3, 4, 5 };
foreach (var item in set)
{
????Console.WriteLine(item); ?// 輸出:1, 2, 3, 4, 5(順序不可預測)
}
6,SortedList<key, value>
SortedList也是基于鍵值對的集合,在存儲鍵值對時會自動按鍵排序,位于 System.Collections.Generic命名空間下
(1)SortedList的基本特性
①自動排序:根據鍵的順序自動排序,可以是升序或自定義的排序方式(如果 提供了比較器)
②鍵唯一:每個鍵都是唯一的,不能重復
(2)常用方法和屬性
①Add(key,value):向SortedList中添加鍵值對
②Remove(key):根據鍵刪除指定的鍵值對
③ContainsKey(key):判斷是否包含指定的鍵
④IndexOfKey(key):獲取指定鍵的位置,如果鍵不存在,返回-1
⑤Count():獲取SortedList中的元素數量
⑥clear():清空所有鍵值對
(3)遍歷SortedList
通過foreach直接循環遍歷
例:
SortedList<int, string> sortedList = new SortedList<int, string>
{
????{ 3, "Three" },
????{ 1, "One" },
????{ 2, "Two" }
};
foreach (var kvp in sortedList)
{
????Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}
輸出:
Key: 1, Value: One
Key: 2, Value: Two
Key: 3, Value: Three
三,總結
以上就是所有的集合類型,推薦使用泛型類型的集合