C#字典、集合、列表的时间复杂度
List列表是顺序线性表,Add操作是O(1)或O(N),因为List是动态扩容的,在未扩容之前,其Add操作是O(1),⽽在扩容的时候,Add操作是O(N)的。其Contains⽅法,是按照线性检索的,其复杂度是O(n)。
SortedList列表是有序线性表,Add操作是O(n), 其Contains⽅法是通过⼆分查检索元素的,因此复杂度是O(lg n),其Containskey⽅法也是通过⼆分查检索元素,复杂度也是O(lg n),ContainsValue⽅法是使⽤线性查元素,复杂度是O(n)。
HashSet集合类是包含不重复项的⽆序hash表(⾮线性),它本⾝是⼀个⼀维数组,但是⼆维链表结构(扩展:⼀维数组的⼤⼩总是2的N次⽅)。Add操作是O(1)或是O(N)的,原因同List集合类。Contains⽅法是O(1)。
SortedSet集合类是基于红⿊树实现的,其Add⽅法是O(lg n),Contains⽅法也是O(lg n)。
Dictionary字典类是hash表,Add操作是O(1)或是O(N)的,原理同上。其Containskey⽅法是O(1),原因是通过hash来查元素⽽不是遍历元素。ContainsValue⽅法的时间复杂度是O(N),原因是内部通过遍历key来查value,⽽不是通过hash来查。Item[Key]属性根据key来检索value,其时间复杂度也是O(1)。
sortedlist
SortedDictionary字典类是基于平衡⼆叉树实现的,其Add⽅法是O(lg n),ContainsKey⽅法也是O(lg n),⽽ContainsValue⽅法则是
O(n)。