List 集合類是順序線性表,Add操做是O(1)或是O(n)的,因爲List的容量是動態擴容的,在未擴容以前,其Add操做是O(1),而在須要擴容的時候,會拷貝已存在的那些元素同時添加新的元素,此時的Add操做是O(n)的。而對於Contains方法,其是按照線性檢索的,其複雜度是O(n)。而BinarySearch方法,其是按二分查找的,其複雜度是O(lg n)。html
SortedList集合類是有序線性表,Add操做是O(n), 其Contains方法是經過二分查找檢索元素的,所以複雜度是O(lg n),其Containskey方法也是經過二分查找檢索元素,複雜度也是O(lg n),ContainsValue方法是使用線性查找元素,複雜度是O(n)。spa
Dictionary集合類是hash表,Add操做是O(1)或是O(n)的,緣由同上。其Containskey方法是O(1),緣由是經過hash來查找元素而不是遍歷元素。ContainsValue方法的時間複雜度是O(n),緣由是內部經過遍歷key來查找value,而不是經過hash來查找。Item[Key]屬性根據key來檢索value,其時間複雜度也是O(1)。htm
SortedDictionary集合類是基於平衡二叉樹實現的,其Add方法是O(lg n),ContainsKey方法也是O(lg n),而ContainsValue方法則是O(n)。blog
HashSet集合類是包含不重複項的無序hash表(非線性表)。Add操做是O(1)或是O(n)的,緣由同List集合類。Contains方法是O(1)。HashSet是Set集合,它只實現了ICollection接口,在單獨元素訪問上,有很大的限制: 接口
一、跟List相比,不能使用下標來訪問元素,如:list[1] 。 get
二、跟Dictionary相比,不能經過鍵值來訪問元素,例如:dic[key],由於HashSet每條數據只保存一項,並不採用Key-Value的方式,換句話說,HashSet中的Key就是Value,假如已經知道了Key,也不必再查詢去獲取Value,須要作的只是檢查值是否已存在。hash
SortedSet集合類是基於紅黑樹實現的,其Add方法是O(lg n),Contains方法也是O(lg n)it
目前只涉及到Add以及Contains等檢索方法,後續可能會補充上刪除等操做的複雜度。io
參考:List