国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

.NetFrameworkSystem.Collections集合類

2019-11-14 16:11:42
字體:
來源:轉載
供稿:網友

本文內容

  • 集合類
  • 性能

最近復習了一下集合,C# 關于集合的類蠻多,但我除了 List 那幾個經常用之外,其他的用得還真不多(只在小范圍使用),但其實,每個集合類都各有自己適用的場景,功能也很強大。尤其是,泛型類提供的那些方法,對于集合操作很方便,比如,很多方法都把委托作為參數,包括 ActionFunPRedicate 等,這樣,就可以使用匿名函數或 Lamda 表達式編程,代碼很簡潔,應該多試試,再用以前的 for 循環遍歷就有點 out 了~

一般的集合類都在 System.Collections System.Collections.Generic 命名空間里,前者是非泛型集合,后則是泛型集合;線程安全的集合類位于 System.Collections.Concurrent 命名空間。

下載 Demo

集合類


集合,都是一些《數據結構》中常見的結構,比如,列表、隊列、棧、雙向鏈表、字典、散列等等,其中,列表、雙向鏈表、字典、散列還有有序和無序之分等等。

其實,.Net 提供的每個集合類都繼承了相應的接口,不同接口的組合,就會出現不同的集合類。

集合

描述

ArrayList,List<T>

列表,List<T> 是 ArrayList  的泛型形式。

Stack<T>

Queue<T>

隊列

HashSet<T>,SortedSet<T>

集,包含不重復元素的集合成為“集(set)”.

其中,HashSet<T> 集合包含不重復元素的無序列表;SortedSet<T> 集合包含不重復元素的有序列表。

LinkedList<T>

雙向鏈表

Dictionary<TKey, TValue>

字典,允許按照某個鍵來訪問元素。字典也稱為映射或散列表。字典的主要特征是能根據鍵快速查找值。也可以自由添加和刪除元素,這有點 List<T> 類,但沒有在內存中移動后續元素的性能開銷。

SortedDictionary<TKey, TValue>

有序字典,是一個二叉搜索樹,其中的元素根據鍵來排序。該鍵類型必須實現 IComparable<TKey> 接口。

SortedList<TKey, TValue>

有序鏈表,該類按照鍵給元素排序。

 

性能


每個集合類類型,對不同的操作,性能也不同。實際項目中,可以綜合考慮下。

集合

Add

Insert

Remove

Item

Sort

Find

List<T>

如果集合必須重置大小,就是 O(1) 或 O(n)

O(n)

O(n)

O(1)

O(n log n),最壞情況 O(n^2)

O(n)

Stack<T>

Push(),如果棧必須重置大小,就是 O(1) 或 O(n)

N/A

Pop()

O(1)

N/A

N/A

N/A

Queue<T>

Enqueue(),如果隊列必須重置大小,就是 O(1) 或 O(n)

N/A

Dequeue()

O(1)

N/A

N/A

N/A

HashSet<T>

如果集必須重置大小,就是 O(1) 或 O(n)

Add()

O(1) 或 O(n)

O(1)

N/A

N/A

N/A

LinkedList<T>

AddLast()

O(1)

AddAfter()

O(1)

O(1)

N/A

N/A

O(n)

Dictionary<TKey, TValue>

O(1) 或 O(n)

N/A

O(1)

O(1)

N/A

N/A

SortedDictionary<TKey, TValue>

O(log n)

N/A

O(log n)

O(log n)

N/A

N/A

SortedList<TKey, TValue>

無序數據為 O(n),如果必須重置大小,到列表的尾部就是 O(log n)

N/A

O(n)

讀寫是 O(log n),如果鍵在列表中,就是 O(log n),否則,就是 O(n)

N/A

N/A

* 注意:N/A 表示該操作不能應用于這種集合類型。

其中,

  • O(1) 表示無論集合中有多少數據項,這個操作需要的時間都不變;
  • O(n) 表示對于集合中的每個元素,需要增加的時間都是相同的;
  • O(log n) 表示操作需要的時間隨集合中元素的增加而增加,但每個元素需要增加的時間,不是線性的,而不是呈對數曲線。

如何看這張表:

  • 什么是“重置大小”,當集合的容量不夠時,每次都會將列表的容量重新設置為原來的2倍。也就是,如果集合的容量是 4,當添加第 5 個元素后,容量就變成 8,當添加第 9 個元素后,容量就變成 16……;
  • List<T> 列表,是比較基本的一個,除了排序,時間復雜度大都是線性的,而且索引訪問的時間復雜度是 O(1);
  • Stack 和 Queue,入棧和入隊列,是 O(1) 或 O(n);出棧和出隊列,是在棧定和對頭進行,所以是 O(1);插入、索引器、排序、查找這些操作,棧和隊列是不支持的;
  • LinkedList<T> 雙向鏈表,它的優點是插入很快,但是查找較慢,因為要一個接一個訪問。不支持索引和排序操作;
  • SortedList<TKey, TValue> 是有序列表,無論你以怎么添加,元素都是按鍵給排好序的;
  • Dictionary<TKey, TValue> 是一般用途的字典,將鍵映射到值上,所以它的添加、刪除、索引的速度很快;
  • SortedDictionary<TKey, TValue> 是有序的字典,一個二叉搜索樹。SortedDictionary<TKey, TValue> 跟 SortedList<TKey, TValue>功能類似,但 SortedList<TKey, TValue> 實現為一個基于數組的鏈表;而 SortedDictionary<TKey, TValue>實現為一個字典,所以它們有不同的特性:
    • SortedList<TKey, TValue> 使用的內存比 SortedDictionary<TKey, TValue> 少;
    • SortedDictionary<TKey, TValue> 的插入和刪除速度比較快;
    • 在用已排好序的數據填充集合時,若不需要修改容量,SortedList<TKey, TValue> 就比較快。

 

下載 Demo


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邳州市| 岳阳县| 灵寿县| 阜阳市| 榆社县| 肃北| 涞水县| 咸丰县| 白银市| 甘孜县| 定陶县| 耒阳市| 曲麻莱县| 泗水县| 景德镇市| 宁乡县| 汾西县| 淳化县| 山阳县| 依安县| 正宁县| 清丰县| 保亭| 曲水县| 涞源县| 阿克陶县| 云南省| 视频| 南部县| 江口县| 峨眉山市| 绥滨县| 唐海县| 澜沧| 洞口县| 麦盖提县| 新蔡县| 南华县| 读书| 军事| 巨鹿县|