1. ArrayList

1.1 ArrayList是一个特殊数组,通过添加和删除元素就可以动态改变数组的长度。

ArrayList集合相对于数组的优点:支持自动改变大小,可以灵活的插入元素,可以灵活的删除元素,可以灵活的访问元素,但是ArrayList只支持一维,并且查询和检索的。

1.2 速度比较慢。

在C#中数据类型分为两类:值类型和引用类型。int bool char double enum struct DateTime等都是值类型(值类型和引用类型的重要特征在于,值类型的长度固定,而引用类型的长度不固定),string Array class集合 等都是引用类型。如果是值类型直接存储在栈中(局部变量),如果是引用类型,先把数据存储在堆中,然后把堆的地址存储在栈中。
object类是所有类的基类,所有的数据类型都可以转换成object类,这就是为什么ArrayList可以存储值类型和引用类型,因为在存储的时候全被转换成object类型存储这也是ArrayList的一个缺点,就是存储的时候需要把值类型封装成object类型,取出来的时候需要再把object类型再转换成值类型,这一装箱和拆箱的过程非常消耗性能。
装箱:如果往ArrayList中存储值类型的数据,在存储的时候需要转换成object类型存储,由值类型封装成object类型的过程称为装箱。
拆箱:由object类型转换成值类型的过程称为拆箱。

2. List

继承了ArrayList的特点,但是声明时需要指定类型,减少了装箱拆箱操作,提升了性能。
有索引,可以进行排序,修改等等。

3. LinkedList(链表)

ArrayList或者List都有个缺陷,插入元素或者移除元素时速度较慢,因为存在后续元素的位置变化。
LinkedList每个元素记录下一个元素的位置,那么就插入或者移除元素时只需要修改标记即可,不用移动后面的元素了,大大提高了效率。

ArrayList vs List vs LinkedList: 尽量避免使用ArrayList,多线程时候可以用ConcurrentBag。
==插入、删除较多用LinkedList,否则用List == 包(Bag)包可包含重复元素(此处对应List)。
集(Set)集中不能包含重复元素。

4. HashTable

4.1 key-value组合,可以添加不同类型的数据,取出之后需要转换成对应类型

  Hashtable hashtable = new Hashtable();
    
  hashtable.Add("名字", "小丽");
  hashtable.Add("年龄", 22);
  return hashtable;

4.2 HashTable线程安全,允许单线程写入,多线程读取。

5. Dictionary

5.1 key-value组合,必须指定数据类型

5.2 速度较快,不必装箱拆箱

5.3 非线程安全(即使这样,也可以用ConcurrentDictionary代替)

HashTable vs Dictionary :
Dictionary效率高,但是人为lock保持线程安全时效率反而低下。 多线程编程需要ConcurrentDictionary,单线程需要Dictionary。
优化小技巧:由于Dictionary有底层有桶和链表结构,有时候将List转为Dictionary进行操作(用主键作为key),反而效率更高。

插入性能:List < HashTable < Dictionary < LinkedList
遍历性能:HashTable < Dictionary < LinkedList < List
删除性能:List < HashTable < LinkedList < Dictionary

5. Queue

队列:先进先出(FIFO)

6. Stak

栈:后进先出(LIFO)

7. HashSet<T>和SortedSet<T>

7.1 都属于集(Set:元素不可重复),加入重复元素时并不会报错。SortedSet还有排序的功能,例如加入1、3、2,foreach会得到1、2、3

C#常见几种集合比较的更多相关文章

  1. JAVA:三种集合LIST、SET、MAP

    1. 集合框架介绍 我 们知道,计算机的优势在于处理大量的数据,在编程开发中,为处理大量的数据,必须具备相应的存储结构,数组可以用来存储并处理大量类型相同的数 据,但是会发现数组在应用中的限制:数组长 ...

  2. Windows Phone中的几种集合控件

    前言 Windows Phone开发过程中不可避免的就是和集合数据打交道,如果之前做过WP App的开发的话,相信你已经看过了各种集合控件的使用.扩展和自定义.这些个内容在这篇博客里都没有,那么我们今 ...

  3. 【转】.NET+AE开发中常见几种非托管对象的释放

    尝试读取或写入受保护的内存.这通常指示其他内存已损坏. 今天在开发时遇到一个问题:" 未处理 System.AccessViolationException Message="尝试 ...

  4. Mysql的常见几种错误:1045,1044

    Mysql的常见几种错误: 一.在进入 mysql 数据库时出错   # mysql -u root -p Enter password: ERROR 1045 (28000): Access den ...

  5. css中常见几种float方式以及倒计时(刷新页面不清)

    css中常见几种float方式 http://jingyan.baidu.com/article/72ee561a670269e16138dfd5.html <script type=" ...

  6. Python发送邮件(常见四种邮件内容)

    Python发送邮件(常见四种邮件内容) 转载 2017年03月03日 17:17:04   转自:http://lizhenliang.blog.51cto.com/7876557/1875330 ...

  7. Spring学习(三)几种集合属性的注入方式

    1.前言 众所周知.java中不只有八大简单类型.还有一些集合类型.本文围绕集合类型的注入做一个总结. 2.项目骨架 3.过程 1.创建实体类AllCollectionType package com ...

  8. 常见三种存储方式DAS、NAS、SAN的架构及比较

    转至:https://blog.csdn.net/shipeng1022/article/details/72862367 随着主机.磁盘.网络等技术的发展,数据存储的方式和架构也在一直不停改变,本文 ...

  9. http常见7种请求

    抛砖引玉,聊下概念性的东西先: HTTP协议 (Hyper Text Transfer Protocol) HTTP是一个基于TCP/IP通信协议来传递数据,包括html文件.图像.结果等,即是一个客 ...

随机推荐

  1. PHP0008:PHP基础-数组

  2. Java(四)输出和输入函数

    介绍一下Java里简单常用的输入输出方法. Java的输出函数很简单,直接调用System类的out对象的print函数即可. 代码: System.out.print(a);//输出变量a的值 Sy ...

  3. 安装AB到CentOS(YUM)

    运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:httpd-tools-2.4.6 硬件要求:无 安装过程 1.安装YUM-EPEL源 HTTP ...

  4. java流程控制结构

    一.流程控制分三类 1. 顺序结构 - 程序是从上往下,从左往右执行 2. 选择结构(判断结构) - if语句 A. if(关系表达式){语句体} - 执行流程:成立就执行语句体,不成立就不执行 B. ...

  5. [POI2005] SKA-Piggy Banks - DFS

    有N个小猪存钱罐.每一个存钱罐能够用相应的钥匙打开或者被砸开.Byteazar已经将钥匙放入到一些存钱罐中.现在已知每个钥匙所在的存钱罐,Byteazar想要买一辆小汽车,而且需要打开所有的存钱罐.然 ...

  6. ActiveMQ的JMS消息可靠机制

    JMS消息可靠机制 ActiveMQ消息签收机制: 客戶端成功接收一条消息的标志是一条消息被签收,成功应答. 消息的签收情形分两种: 1.带事务的session 如果session带有事务,并且事务成 ...

  7. 0级搭建类004-中标麒麟 Linux 安装 (V7.0) 公开

    项目文档引子系列是根据项目原型,制作的测试实验文档,目的是为了提升项目过程中的实际动手能力,打造精品文档AskScuti. 项目文档引子系列目前不对外发布,仅作为博客记录.如学员在实际工作过程中需提前 ...

  8. 关于Javascript闭包的理解

    以下内容属个人理解,如有看不明白或漏洞之处,纯属水平不佳,还望见谅. 关于闭包,高程里的定义是:指有权访问另一个函数作用域中的变量的函数.创建闭包最常见的方法就是在一个函数的内部再创建一个函数. 这里 ...

  9. ubuntu 16.04.1上安装并使用vsftpd

    1.安装vsftpd软件 sudo apt-get install vsftpd 2.新建文件 sudo vim /etc/vsftpd.user_list 用于记录用户名 3. 修改sudo vim ...

  10. 【Unity|C#】基础篇(19)——集合库(Collections)

    [学习资料] <C#图解教程>(第6章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu.c ...