C# 集合性能 总结
一.引言
本文主要记录的是C#各种集合操作的性能,下面的标记说明描述标记的时间,下面的表格对比各种集合各种操作的时间.
标记说明:- O(1) 表示无论集合中有多少项,这个操作需要的时间都不变,例如,ArraryLIst的Add()方法就O(1),无论集合中有多少元素,在列表尾部添加一个新的元素的时间都是相同的.
2. O(n)表示对于集合中的每个元素,需要增加的时间量都是相同的,如果需要重新给集合分 配内存,ArrayList的Add()方法就O(n),改变容量,需要复制列表,复制的时间随元素的增加和线性增加.
3. O(log n)表示操作需要的时间随着集合中元素的增加和增加,但每个元素增加的时间不是线性的.而是呈对数曲线,在集合中插入操作时,SortedDictionary<Tkey,Tvalue>就是O(log n),而SortedList<Tkey,Tvalue> 就是O(n),这里SortedDictionary<Tkey,Tvalue>要快的多.因为它在树形结构中插入元素的效率比列表高的多.
下表显示各种集合的操作时间:
注:如果单元格中有多个大O值,表示集合需要重置大小,该操作需要一定的时间
如果单元格内容是no,就表示不支持这种操作.
| 集合 | 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) | no | Pop(),O(1) | no | no | no |
| Queue<T>(列队) | Enqueue(),如果栈必须重置大小,就是O(1)或O(n) | no | Dequeu(),O(1) | no | no | no |
| HastSet<T>(无序列表) | 如果栈必须重置大小,就是O(1)或O(n) |
Add() O(1)或O(n) |
O(1) | no | no | no |
| LinkedList<T>(链表) | AddLast(),O(1) | AddAfter(),O(1) | O(1) | no | no | O(n) |
| Dictionary<Tkey,TValue> | O(1) 或 O(n) | no | O(1) | O(1) | no | no |
| SortedDictionary<Tkey,Tvalue> | O(log n) | no | O(log n) | O(log n) | no | no |
| SortedList<Tkey,Tvalue> |
无序数据为O(n),如果必选重置大小,到列表的尾部就是 O(log n) |
no | O(n) | 读写是O(log n),如果键在列表中,就是O(log n),如果键不在列表中就是O(n). | no | no |
小结:
数组的大小是固定的,但可以使用列表作为动态增长集合,列队以先进先出的方式访问元素,栈以后进先出的方式访问元素,
链表可以快速的插入和删除元素,但搜索比较慢,通过键和值可以使用字典,它的搜索和插入操作比较快,集(Hashset<T>) 是用于无序的唯一项.
C# 集合性能 总结的更多相关文章
- Java集合性能分析-疯狂Java讲义
一.各Set实现类的性能分析 HashSet和TreeSet是Set的两个典型实现.HashSet的性能总是比TreeSet好(特别是最常用的添加.查询元素等操作),因为TreeSet需要额外的红黑树 ...
- redis有序集合性能 列表、集合、有序集合
https://www.cnblogs.com/pirlo21/p/7120935.html 1.1 列表 列表(list)类型是用来存储多个字符串,元素从左到右组成一个有序的集合.列表中的每个字符串 ...
- C# 集合性能比较(代码测试)
using System; using System.Collections; using System.Collections.Generic; using System.Data; using S ...
- C#主要字典集合性能对比[转]
A post I made a couple days ago about the side-effect of concurrency (the concurrent collections in ...
- java集合性能
https://www.cnblogs.com/xyhuangjinfu/p/5429644.html
- C#语言各种集合介绍
集合,表示可以通过遍历每个元素来访问的一组对象(特别是可使用foreach循环访问)一个集合包括多个元素,即有一个集合类对象和N个元素对象 因为任何集合类都实现了IEnumerable接口,所以任何集 ...
- Java集合 List,Set,Map
一.List:.有顺序以线性方式存储,可以存放重复对象 线程安全方法:List list = Collections.synchronizedList(new LinkedList(...)); ...
- JAVA基础知识之Set集合
Set集合的基本特征是不记录添加顺序,不允许元素重复(想想是为什么).最常用的实现类是HashSet. 本文将要介绍以下内容 HashSet类 HashSe的特征 HashSet的equals和has ...
- python 集合
面向对象的集合: #coding:utf-8 __author__ = 'similarface' class Set: ''' list实现集合,及其集合操作 ''' def __init__(se ...
随机推荐
- 蓝牙芯片NRF51822入门学习1:时间管理
前言 之前辞职找工作的时候发现,很多公司希望招聘蓝牙技术方面的人才,所以干脆丢开LWIP静下心来学习蓝牙技术.原本以为一两星期能基本学会的,谁知道所选的蓝牙芯片nrf51822是个坑货,坑了我一个月. ...
- VS2010的openssl源码编译方法
http://download.csdn.net/download/soucula/9591308
- DHTMLEdit
DHTMLEdit POP3研究了一会,发现如果要写一个类似FOXMAIL的东西,还需要解决一个编辑的问题.以为邮件是支持HTML编辑的. 网上查了一会发现可以使用WINDOWS自带的控件:DHT ...
- 浅谈程序员创业(要有一个自己的网站,最好的方式还是自己定位一个产品,用心把这个产品做好。或者满足不同需求的用户,要有特色)good
浅谈程序员创业 ——作者:邓学彬.Jiesoft 1.什么是创业? 关于“创业”二字有必要重新学习一下,找了两个相对权威定义: 创业就是创业者对自己拥有的资源或通过努力能够拥有的资源进行优化整合,从而 ...
- 《Programming WPF》翻译 第7章 3.笔刷和钢笔
原文:<Programming WPF>翻译 第7章 3.笔刷和钢笔 为了在屏幕上绘制一个图形,WPF需要知道你想要为图形填充什么颜色以及如何绘制它的边框.WPF提供了一些Brush类型支 ...
- 3Sum Closest 解答
Question Given an array S of n integers, find three integers in S such that the sum is closest to a ...
- Raw qcow qcow2 vhd-vpc虚拟磁盘格式间相互转换
- IOS开发之语音合成(科大讯飞)详解
1.注册讯飞账号,申请APPID(注意选择IOS平台) 2.加载所需要的类库 3.导入所需要的类库文件头 4.调用申请的APPID以及所需函数,完成语音合成(需要参考官方给出的SDK文件) 详细步 ...
- Objective-C(十八、谓语使用及实例说明)——iOS开发基础
结合之前的学习笔记以及參考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结.知识点一直在变,仅仅是作为參考,以苹果官方文档为准~ 十八.谓语的使用及 ...
- boost.asio系列——Timer
同步Timer asio中提供的timer名为deadline_timer,它提供了超时计时的功能.首先以一个最简单的同步Timer为例来演示如何使用它. #include<iostream&g ...