List 集合类是顺序线性表,Add操作是O(1)或是O(n)的,由于List的容量是动态扩容的,在未扩容之前,其Add操作是O(1),而在需要扩容的时候,会拷贝已存在的那些元素同时添加新的元素,此时的Add操作是O(n)的。而对于Contains方法,其是按照线性检索的,其复杂度是O(n)。而BinarySearch方法,其是按二分查找的,其复杂度是O(lg n)。

SortedList集合类是有序线性表,Add操作是O(n), 其Contains方法是通过二分查找检索元素的,因此复杂度是O(lg n),其Containskey方法也是通过二分查找检索元素,复杂度也是O(lg n),ContainsValue方法是使用线性查找元素,复杂度是O(n)。

Dictionary集合类是hash表,Add操作是O(1)或是O(n)的,原因同上。其Containskey方法是O(1),原因是通过hash来查找元素而不是遍历元素。ContainsValue方法的时间复杂度是O(n),原因是内部通过遍历key来查找value,而不是通过hash来查找。Item[Key]属性根据key来检索value,其时间复杂度也是O(1)。

SortedDictionary集合类是基于平衡二叉树实现的,其Add方法是O(lg n),ContainsKey方法也是O(lg n),而ContainsValue方法则是O(n)。

HashSet集合类是包含不重复项的无序hash表(非线性表)。Add操作是O(1)或是O(n)的,原因同List集合类。Contains方法是O(1)。HashSet是Set集合,它只实现了ICollection接口,在单独元素访问上,有很大的限制:

1、跟List相比,不能使用下标来访问元素,如:list[1] 。

2、跟Dictionary相比,不能通过键值来访问元素,例如:dic[key],因为HashSet每条数据只保存一项,并不采用Key-Value的方式,换句话说,HashSet中的Key就是Value,假如已经知道了Key,也没必要再查询去获取Value,需要做的只是检查值是否已存在。

SortedSet集合类是基于红黑树实现的,其Add方法是O(lg n),Contains方法也是O(lg n)

目前只涉及到Add以及Contains等检索方法,后续可能会补充上删除等操作的复杂度。

参考:

真是O(1)吗?想清楚了没?

C# SortedDictionary以及SortedList的浅谈

你真的了解字典(Dictionary)吗?

C#常用集合类的实现以及基本操作复杂度的更多相关文章

  1. 浅谈C#常用集合类的实现以及基本操作复杂度

    List 集合类是顺序线性表,Add操作是O(1)或是O(n)的,由于List的容量是动态扩容的,在未扩容之前,其Add操作是O(1),而在需要扩容的时候,会拷贝已存在的那些元素同时添加新的元素,此时 ...

  2. 十六、C# 常用集合类及构建自定义集合(使用迭代器)

    常用集合类及构建自定义集合 1.更多集合接口:IList<T>.IDictionary<TKey,TValue>.IComparable<T>.ICollectio ...

  3. c#中常用集合类和集合接口之接口系列【转】

    常用集合接口系列:http://www.cnblogs.com/fengxiaojiu/p/7997704.html 常用集合类系列:http://www.cnblogs.com/fengxiaoji ...

  4. c#中常用集合类和集合接口之集合类系列【转】

    常用集合接口系列:http://www.cnblogs.com/fengxiaojiu/p/7997704.html 常用集合类系列:http://www.cnblogs.com/fengxiaoji ...

  5. iOS Foundation框架 -2.常用集合类简单总结

    Foundation框架中常用的类有:NSString.NSArray.NSSet.NSDictionary 以及它们对应的子类 NSMutableString.NSMutableArray.NSMu ...

  6. Java常用集合类

    上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,Abstract ...

  7. Java集合源码学习(五)几种常用集合类的比较

    这篇笔记对几个常用的集合实现,从效率,线程安全和应用场景进行综合比较. >>ArrayList.LinkedList与Vector的对比 (1)相同和不同都实现了List接口,使用类似.V ...

  8. Java常用集合类详解

    在Java中有一套设计优良的接口和类组成了Java集合框架,使程序员操作成批的数据或对象元素极为方便.所有的Java集合都在java.util包中. 在编写程序的过程中,使用到集合类,要根据不同的需求 ...

  9. java常用集合类详解(有例子,集合类糊涂的来看!)

    Framework集合框架是一个统一的架构,用来表示和操作集合.集合框架主要是由接口,抽象类和实现类构成.接口:蓝色:实现类:红色Collection|_____Set(HashSet)|       ...

随机推荐

  1. Spring服务发现和注册

  2. 201871010101-陈来弟《面向对象程序设计(Java)》第八周学习总结

    实验七 接口的定义与使用 第一部分:理论知识 一.接口.lambda和内部类:  Comparator与comparable接口: 1.comparable接口的方法是compareTo,只有一个参数 ...

  3. 交互器中python中的帮助使用

    C:\Users\ceshi>pythonPython 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 b ...

  4. python批量修改文件名(以修改图片名为例)

    #coding=utf-8import sys, string, os, shutil #输入目录名和前缀名,重命名后的名称结构类似prefix_0001 def RenameFiles(srcdir ...

  5. python -m pip install --upgrade pip

    升级pip后报错 TypeError: 'module' object is not callable 原因 存在两个版本的pip 先把原先版本的卸载了: python -m pip uninstal ...

  6. centos7中运行ifconfig提示“-bash: ifconfig: command not found”解决方案

    linux系统查看ip地址常用命令是[ifconfig], CentOS 7.0最小安装是没有ifconfig命令怎么办? 1.用[ip addr]查看; 2.就是安装ifconfig命令 1.输入[ ...

  7. python 环境搭建 python-3.4.4

    第一步:下载和安装python-3.4.4amd.msi 可以去官方网站下载,也可以从网盘下载: 链接:https://pan.baidu.com/s/1dZ9ibgigKPdPUJgykLA_jg ...

  8. 【day02】PHP

    一.数据类型(8个主要数据类型和4个伪类型)  1.8个主要数据类型     (1)标量类型(存储单一值)        a.整型(Integer Int)        b.浮点型(Float Do ...

  9. HTTP协议COOKIE和SESSION有什么区别

    1.为什么会有COOKIE这种机制 首先一种场景, 在一个网站上面, 我发起一次请求,那服务器怎么知道我是谁?是谁发起的这次请求呢,  HTTP协议是无状态的协议, 浏览器的每一次请求,服务器都当做一 ...

  10. [LeetCode] 75. Sort Colors 颜色排序

    Given an array with n objects colored red, white or blue, sort them in-place so that objects of the ...