VS 2012 C# 集合_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > VS 2012 C# 集合

VS 2012 C# 集合

 2015/1/31 22:53:46  IGod接口  程序员俱乐部  我要评论(0)
  • 摘要:本文内容集合性能最近复习了一下集合,C#关于集合的类蛮多的,但我除了List那几个经常用之外,其他的用得还真不多,但其实,每个集合类都各有自己适用的场景,功能也很强大。尤其是,泛型类提供的那些方法,对于集合操作很方便,比如,很多方法都把委托作为参数,这样,你就可以使用匿名函数或Lamda表达式编程,代码很简洁。一般的集合类都在System.Collections和System.Collections.Generic命名空间里,前者是非泛型集合,后则是泛型集合;线程安全的集合类位于System
  • 标签:C#

本文内容

  • 集合
  • 性能

最近复习了一下集合,C# 关于集合的类蛮多的,但我除了 List 那几个经常用之外,其他的用得还真不多,但其实,每个集合类都各有自己适用的场景,功能也很强大。尤其是,泛型类提供的那些方法,对于集合操作很方便,比如,很多方法都把委托作为参数,这样,你就可以使用匿名函数或 Lamda 表达式编程,代码很简洁。

一般的集合类都在 System.Collections 和 System.Collections.Generic 命名空间里,前者是非泛型集合,后则是泛型集合;线程安全的集合类位于 System.Collections.Concurrent 命名空间。

下载 Demo

集合


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

其实,.Net 提供的每个集合类都继承了相应的接口,不同接口的组合,就会出现不同的集合类。

集合

描述

ArrayList,List<T>

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

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

发表评论
用户名: 匿名