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