VS 2012 C# 集合

本文内容

  • 集合
  • 性能

最近复习了一下集合,C# 关于集合的类蛮多的,但我除了 List 经常用之外,其他的用还真不多,但其实,每个集合的差别很大,各有适用的场景,功能也很强大。

下载 Demo

集合



集合,都是一些数据结构中提到的常见结构,比如,列表、队列、栈、链表、字典、散列等等,其中,列表、链表、字典、散列还有有序和无序之分等等。


集合


描述


ArrayList,List<T>


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


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) 表示操作需要的时间随集合中元素的增加而增加,但每个元素需要增加的时间,不是线性的,而不是呈对数曲线。

 

下载 Demo

时间: 2024-12-20 23:21:18

VS 2012 C# 集合的相关文章

SCCM 2012 R2 实战系列(七)—创建用户、设备集合

可以看到这些用户和设备统一放在这里比较凌乱,也不利于管理,在SCCM中我们有很多种方法可以对他们进行分类,因为SCCM可以收集到客户端的很多信息,这些信息也有利于我们进行统一分类管理,比如最常见的就是按照操作系统进行分类,我们可以创建多种类型的集合,比较常用的有两种 一.静态集合二.动态集合 比如说用户我们可以创建一个静态集合,把管理员或者所有现有普通用户加到集合里面 1.在资产和符合性->概述->用户集合中,右键选择创建用户集合 2.输入集合名称,点击浏览 3.选择所有用户和用户组 4.这里

Windows Server 2012 R2 VDI系列(六)—创建会话集合

虚拟桌面集合创建完毕之后我们来创建会话集合,以发布应用程序供用户访问 1.在服务器管理器->远程桌面服务->概述中,右键RD会话主机,选择创建会话集合 2.直接下一步 3.输入名称,直接下一步 4.选择一台RDSH服务器,下一步 5.设置具有访问权限的用户组 6.启用用户配置文件磁盘,启用之后用户的配置文件和数据将统一存储在一个固定的位置,这样的话更方便集中化的管理 7.点击创建 8.创建过程将自动开始 9.创建完毕 会话集合创建完毕,我们可以通过它来发布应用程序或者是远程桌面 Windows

Windows Server 2012 R2 VDI系列(四)—创建虚拟桌面集合

RDVH角色已经配置完成,接下来,我们可以尝试创建一个虚拟桌面的集合,来验证RDVH的配置 这里需要注意我们之前需要准备一个模板机作为创建虚拟机的模板,这台机器应该是打好补丁,并且做了sysprep的,这个过程我们就不在这里给大家演示了,我们直接来看创建虚拟桌面集合的过程 1.在服务器管理器->远程桌面服务->集合中,选择任务,点击创建虚拟桌面集合 2.直接下一步 3.输入虚拟桌面集合的名字,下一步 4.这里我们选择虚拟机集合池,或者选择个人虚拟机集合也可以 5.这里要注意我们需要选择之前做好

SQL Server 2012 案例教程(贾祥素)——学习笔记

第2章 SQL Server 2012概述 1.SQL(Structed Query Language),结构化查询语言. 2.SSMS(SQL Server Mangement Studio),SQL Server 2012的操作环境. 3.连接SQL Server之前应先启动SQL Server服务,即SQL Server(MSSQLSERVER): 方法1 开始--所有程序--Microsoft SQL Server 2012--配置工具--SQL Server配置管理器. 方法2 控制面

MongoDB的文档、集合、数据库(二)

为了理解MongoDB的名词,可以将其于关系型数据库进行对比: 一.文档 概述 文档是MongoDB的核心概念,是数据的基本单元,非常类似于关系数据库中的行.在MongoDB中,文档表示为键值对的一个有序集.MongoDB使用Javascript shell,文档的表示一般使用Javascript里面的对象的样式来标记,如下: {"title":"hello!"} {"title":"hello!","recomme

HNOI 2012 永无乡

codevs 1477 永无乡 http://codevs.cn/problem/1477/ 2012年湖南湖北省队选拔赛 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛到达另一个岛.如果从岛 a 出发经过若干座(含 0 座)桥可以到达岛 b,则称岛 a 和岛 b 是连通的.现

C#之再议数组和集合

1.数组 1.1简单数组 1.2 多维数组 1.3锯齿数组 1.4Array数组 1.5作为参数的数组 1.6枚举 1.7结构 以上部分可参考 http://www.cnblogs.com/ztb123/articles/4195864.html 1.8元组 数组合并了相同类型的对象,而元组合并了不同类型的对象.Net 4定义了 8个泛型 Tuple类 和一个静态 Tuple类 ,它们用作元组的工厂. 这里的不同泛型 Tuple类支持不同数量的元素. 例如,Tuple<T1> 包含-个元素,T

【集合】

1.1集合简介 在前面学习了Java数组,Java数组的长度是固定的,在同一个数组中只能存放相同类型的数据.数组可以存放基本类型的数据,也可以存放引用类型的数据. 在创建Java数组时,必须明确指定数组的长度.数组一旦创建,其长度就不能被改变.在许多应用中,一组数据的数目是不固定的.比如一个单位的员工数目是变化的.有老员工跳槽,也有新员工进来. 为了使程序能方便地存储和操纵数目不固定的一组数据,JDK类库提供了Java集合,所有Java集合类都位于java.util包中.与Java数组不同,Ja

Java集合框架的知识总结

说明:面试准备,写的挺不错的. 转载地址: http://www.cnblogs.com/zhxxcq/archive/2012/03/11/2389611.html 1.综述 所有集合类都位于java.util包下.集合中只能保存对象(保存对象的引用变量).(数组既可以保存基本类型的数据也可以保存对象). 当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进行处理.从JDK1.5以后,这种状态得到了改进:可以使用泛型来限制集合里元素的类型,并让集合记住所有集合元素的类