C#集合總結


1.為什么引入集合?

  因為數組長度是固定的,為了建立一個動態的"數組",所以引入了集合。

2.為什么引入ArrayList 非泛型集合?
  ArrayList可以填補數組的不足,進行元素的動態維護。數組的長度是固定的,而ArrayList的容量可以根據需要自動擴充,它的索引會根據程序的擴展而重新分配和調整。

            //創建
            ArrayList studentList = new ArrayList();
            //添加
            studentList.Add(new Student { StudentNo = "01", RealName = "學生01" });
            studentList.Add(new Student { StudentNo = "02", RealName = "學生02" });
            studentList.Add(new Student { StudentNo = "03", RealName = "學生03" });
            //讀取
            Student target = (Student)studentList[0];
            //刪除 根可根據索引刪除指定元素。由於添加和刪除會導致ArrayList索引自動分配和調整,刪除一個元素后(如果不是最后一個元素),其他元素的索引可能會受影響。
            studentList.RemoveAt(0);
            studentList.RemoveAt(1);
            //studentList.RemoveAt(2);//取消注釋會導致程序報錯,因為刪除兩個元素后,列表只有一個元素,最大的索引為0。
            //清空
            studentList.Clear();

  ArrayList說明:

  ArrayList是非泛型集合,添加和讀取數據有裝箱拆箱,所以會有性能損失。

3.為什么引入HashTable(哈希表、散列表) 非泛型集合?

  對於ArrayList集合我們通常會使用索引訪問操作元素,但是這樣的話就存在一個問題,使用這種方式必須知道要操作的索引是多少。Hashtable可以針對這種情況解決問題,它為每個元素都取了一個有意義並且唯一的關鍵字,然后通過關鍵字來訪問元素。Hashtable的數據是通過(key)鍵和值(value)來組織的,所以也叫"字典"。

            //創建
            Hashtable hashtable = new Hashtable();
            //添加
            hashtable.Add("key1", "value1");
            hashtable.Add("key2", "value2");
            //讀取
            string val1 = (string)hashtable["key1"];
            object val3 = hashtable["key3"];//null
            //刪除
            hashtable.Remove("key1");
            //清空
            hashtable.Clear();     

  HashTable說明:

  Hashtable元素時只能使用通過key來取值,鍵和值均是object類型,鍵不可重復。讀取一個不存在的key,得到的value為null。

  Hashtable是非泛型集合,添加和讀取數據有裝箱拆箱,所以會有性能損失。

4.為什么引入泛型集合?

  非泛型集合對元素的數據類型沒有約束性,在添加時數據類型都會被轉為Object類型(裝箱拆箱導致性能損失),讀取的時候也不知道對象的具體的類型,所以在元素數據類型轉換的時候就存在了不確定性(類型不安全)。

  而泛型集合限定了集合中的數據類型(類型安全),沒有裝箱拆箱(沒有性能損失)。

5.為什么引入List<T>泛型集合?

  List<T>泛型集合是ArrayList非泛型集合的升級版,是類型安全的,沒有裝箱和拆箱的性能損耗。

            //創建
            List<Student> list = new List<Student>();
            //添加
            list.Add(new Student { RealName = "學生001" });
            //讀取
            Student student = list[0];
            //刪除
            list.RemoveAt(0);
            //清空
            list.Clear();

6.為什么引入Dictionary<K,V>?

  Dictionary<K,V>泛型集合是HashTable非泛型集合的升級版,是類型安全的,沒有裝箱和拆箱的性能損耗。

            //創建
            Dictionary<string, string> dict = new Dictionary<string, string>();
            //添加
            dict.Add("key1", "value1");
            //讀取
            string value = dict["key1"];
            //刪除
            dict.Remove("key1");
            //清空
            dict.Clear();

 

總結

  為了建立一個動態的"數組",引入了非泛型ArrayList。

  為了建立一個"字典",引入了非泛型HashTable。

  為了建立一個動態的類型安全的"數組",引入了泛型List<T>。

  為了建立一個類型安全的"字典",引入了泛型Dictionary<object,object>。

  為了排序,引入了SortedList SortedDictionary,暫不做說明。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM