C#中常用的泛型集合和非泛型集合(ArrayList、Hashtable、List、Dictionary)

前言

      集合(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 泛型集合描述:

  1. 不會強行對值類型進行裝箱和拆箱。
  2. 可以使用一個整數索引訪問此集合中的元素;索引從 零開始。
  3. 執行得更好並且是類型安全的。
  4. 可以接收null空引用(VB中的Nothing)。
  5. 允許重複元素。
	//命名空間
	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泛型集合描述:

  1. 從一組鍵(Key)到一組值(Value)的映射,每一個添加項都是由一個值及其相關連的鍵組成
  2. 任何鍵都必須是唯一的
  3. 鍵不能爲空引用null(VB中的Nothing),若值爲引用類型,則可以爲空值
  4. 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
添加對象方法相同
遍歷方法相同
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章