前言
集合(Collection)類服務於不同的目的,如爲元素動態分配內存,基於索引訪問列表項等等。這些類創建 Object 類的對象的集合。在 C# 中,Object 類是所有數據類型的基類。
1. ArrayList 非泛型集合
ArrayList集合可以存儲任意類型,集合長度可以自動增長
//命名空間
using System.Collections
//創建ArrayList集合
ArrayList list = new ArrayList();
/* 添加元素 可以添加任意類型 */
list.Add(true); //布爾類型
list.Add(1); //數字類型
list.Add("小源"); //字符串類型
list.Add('男'); //字符類型
list.Add(1.2); //浮點類型
list.AddRange(new int[] {1,2,3,4,5,6}); //數組類型
/* 刪除元素 */
list.Clear(); //清空集合中所有元素
list.Remove(true); //刪除指定元素名的元素
list.RemoveAt(0); //刪除指定索引的元素
list.RemoveRange(0, 3); //根據下標去移除一定範圍的元素
/* 插入元素 */
list.Insert(1,"插入的內容"); //在指定的位置插入一個元素
list.InsertRange(0,new string[]{"張三","李四","王五"}); //在指定的位置插入一個數組
/* 修改元素 */
list[0]="520";
/* 查詢元素 */
bool iRet = list.Contains('男'); //判斷是否包含某個指定的元素
/* 遍歷ArrayList集合 通過for或foreach遍歷集合 */
for(int i=0;i<list.Count;i++)
{
Console.WriteLine(list[i]);
}
foreach(object time in list)
{
Console.WriteLine(time);
}
2. Hashtable 非泛型集合
Hashtable集合 通常成爲哈希表,根據鍵(Key) 可以查找到相應的值(Value)
//命名空間
using System.Collections
/* 創建Hashtable 哈希表集合 */
Hashtable ht = new Hashtable();
/* 添加元素 不能添加重複鍵Key,但可以有重複的值Value */
ht.Add("S10001","小孫");
ht.Add("S10002","小王");
/* 刪除元素 */
ht.Remove(key); //通過鍵刪除Key
ht.Clear(); //移除所有元素
/* 查詢元素 */
bool iRet = ht.Contains(key); //判斷哈希表是否包含特定鍵key
/* 遍歷Hashtable 哈希表集合 */
/* 遍歷鍵 */
Console.WriteLine();
foreach (string key in ht.Keys)
{
Console.WriteLine(key);
}
Console.WriteLine();
/* 遍歷值 */
foreach (string values in ht.Values)
{
Console.WriteLine(values);
}
Console.WriteLine();
/* 遍歷鍵值 */
foreach (DictionaryEntry de in ht)
{
Console.WriteLine(de.Value);
Console.WriteLine(de.Key);
}
3. List< T > 泛型集合
List 泛型集合描述:
- 不會強行對值類型進行裝箱和拆箱。
- 可以使用一個整數索引訪問此集合中的元素;索引從 零開始。
- 執行得更好並且是類型安全的。
- 可以接收null空引用(VB中的Nothing)。
- 允許重複元素。
//命名空間
using System.Collections.Generic;
/* 創建泛型集合 類型中可以是任意類型 */
List<類型> 集合名 = new List<類型>();
/* 添加元素 */
集合名.Add(Value);
/* 刪除元素 */
集合名.Remove(GameObject item); //清空集合指定的子元素
集合名.RemoveAt(索引); //刪除指定索引位置的數據
集合名.Clear(); //清空集合
/* 查詢元素 */
集合名[索引]; //取出指定索引位置的數據
集合名.Count; //集合的長度
/* 修改元素 */
集合名[索引]=新值; //給指定索引的數據重新賦值
/* 遍歷List<>泛型集合 */
foreach(類型 time in 集合名)
{
Console.WriteLine(time);
}
for(int i = 0; i < 集合名.Count; i++)
{
Console.WriteLine(集合名[i]);
}
4. Dictionary<T,V> 字典泛型集合
Dictionary泛型集合描述:
- 從一組鍵(Key)到一組值(Value)的映射,每一個添加項都是由一個值及其相關連的鍵組成
- 任何鍵都必須是唯一的
- 鍵不能爲空引用null(VB中的Nothing),若值爲引用類型,則可以爲空值
- Key和Value可以是任何類型(string,int,custom class 等)
//引用命名空間
using System.Collections.Generic
/* 創建Dictionary集合 */
Dictionary<鍵類型,值類型> 集合名 = new Dictionary<類型,類型>();
/* 添加數據 鍵必須是鍵的數據類型,值必須是值的數據類型*/
集合名.Add(鍵,值);
/* 刪除數據 通過鍵刪除元素*/
集合名.Remove(鍵);
/* 通過Key查詢元素是否存在 */
bool iRet = 集合名.ContainsKey(鍵);
/* 遍歷字典集合 */
/* 遍歷鍵*/
foreach (鍵類型 values in 集合名.Keys)
{
Console.WriteLine(values);
}
/* 遍歷值 */
foreach (值類型 values in 集合名.Values)
{
Console.WriteLine(values.具體屬性(值));
}
/* 遍歷鍵值*/
foreach (KeyValuePair<鍵類型,值類型> values in 集合名)
{
Console.WriteLine(values.Key);
Console.WriteLine(values.Value.具體屬性(值));
}
5. 非泛型集合和泛型集合對比
異同點 | List< T > | ArrayList |
---|---|---|
不同點 | 添加元素時類型嚴格檢查 | 可以增加任何類型 |
添加和讀取值類型元素時,無需裝箱拆箱 | 添加和讀取值類型元素時,需要裝箱拆箱 | |
相同點 | 通過索引訪問集合的元素 | |
添加對象方法相同 | ||
通過索引刪除元素 |
異同點 | Dictionary< K,V > | Hashtable |
---|---|---|
不同點 | 增加元素時類型嚴格檢查 | 可以增加任何類型 |
無需裝箱拆箱 | 需要裝箱拆箱 | |
相同點 | 通過K獲取Value | |
添加對象方法相同 | ||
遍歷方法相同 |