c#集合類彙總(上)

其實一直想把幾個集合類分清楚,哪些可放重複元素,哪些效率高,排序等等。

1.ArrayList

 ArrayList arrayList = new ArrayList(9);
            arrayList.Add(1);
            arrayList.Add("a");
            arrayList.Add(1);
            arrayList.Add(null);
            arrayList.Add("");

1.1注意屬性

capacity:獲取或設置可包含的元素個數。

count:實際包含的元素個數。

如上訴例子,capacity=9,count=5。

如果初始化沒有設置個數或者設置個數小於實際的元素數量,capacity就會成指數增長。

比如 ArrayList arrayList = new ArrayList(1); 那麼capacity=2的3次方=8,直到大於實際元素個數5個。

可見,ArrayList元素是object類型,可存放重複和null元素,統計元素個數時,會將null也統計在內。

但是效率低,因爲可存放object,操作時會涉及到頻繁的裝箱和拆箱。

2.List<T>

用得最多的就是這個了!因爲是泛型,聲明時必須制定存儲的數據類型。

 List<string> list = new List<string>();
            list.Add("a");
            list.Add("b");
            list.Add("a");
            list.Add(null);
有序,可存放重複元素,可null。

3.HashSet<T>

hashset和list類似,不過前者不能存放重複元素,因爲無序,所以不能用索引訪問元素。

 HashSet<string> list = new HashSet<string>() { "a", "b", "c" };
            list.Add("a");
            list.Add(null);
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
輸出:a,b,c

HashSet的Add方法其實是一個bool,如果元素重複返回false。

優點:HashSet檢索性能高,單的說它的Contains方法的性能在大數據量時比List<T>好得多。HashSet<T>的Contains方法複雜度是O(1),List<T>的Contains方法複雜度是O(n)。

4.SortedSet<T>

無序,不包含重複元素

SortedSet<string> list = new SortedSet<string>(){ "a", "e", "c" };
            list.Add("d");
            list.Add("c");
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
輸出a,c,d,e。重複元素被刪除,且輸出排序。

摘自網上的一段說明:

  1. HashSet和SortSet主要的作用是用來進行,兩個集合求交集、並集、差集等運算.集合中包含一組不重複出現且無特性順序的元素。前者不會自動排序,後者會加入元素後,自動排序
  2. 兩者都無法從特定位置訪問其中某個元素。
  3. 可以使用其查找功能:

    Set.Contains("value"); 返回true或false。

  4. 對集合做操作:
  • SymmetricExceptWith: 僅包含該對象或指定集合中存在的元素(但不可同時包含兩者中的元素)。去除交集,剩下兩個集合元素
  • UnionWith: 包含該對象本身和指定集合中存在的所有元素。並集
  • ExceptWith: 從當前 HashSet<T> 對象中移除指定集合中的所有元素。差集
  • IntersectWith: 僅包含該對象和指定集合中存在的元素。交集

     5.SortedSet對象,可以調用GetViewBetween、Max、Min 方法。

     6.除了SortedSet外,System.Collections.Generic命名空間下,還提供了SortedDictionarySortedList兩個類。

5.Queue(隊列)

無序,先進先出的集合,對尾插入,隊首刪除。

Queue queue = new Queue();
            queue.Enqueue(1);
            queue.Enqueue("a");
            queue.Enqueue(1);
            //var s = queue.Dequeue();
            //Console.WriteLine(s);
            foreach (var item in queue)
            {
                Console.WriteLine(item);
            }
遍歷時,不會刪除重複元素。

6.Stack(棧)

無序,先進後出

  Stack stack = new Stack();
            stack.Push("a");//進棧
            stack.Push(1);
            stack.Push("b");
            stack.Push(null);
            stack.Pop();//出棧
            //var s = queue.Dequeue();
            //Console.WriteLine(s);
            foreach (var item in stack)
            {
                Console.WriteLine(item);
            }
輸出:b,1,a



發佈了45 篇原創文章 · 獲贊 9 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章