zoukankan      html  css  js  c++  java
  • C#基础:C#中的数据结构

    一、数组(Array)

    数组具有以下的特点:

    1. 数组属于线性结构,在内存中是连续存放的。
    2. 数组的元素类型必须相同。
    3. 数组可以直接通过下标访问。
    4. 数组的查找速度非常快,新增和删除速度慢。
    5. 数组在初始化时要指定数组长度。

    二、动态数组(ArrayList)

    动态数组具有以下的特点:

    1. ArrayList的底层其实就是一个数组。
    2. ArrayList在声明时不必指定长度,会根据存储的数据动态的增加或减少长度。
    3. ArrayList会把所有的元素都当做Object处理,因此可以存储不同数据类型的元素。
    4. 插入和删除一个元素时,会移动它之后所有元素的位置,效率低,频繁进行插入或者删除元素推荐使用LinkedList。
    5. ArrayList是非类型安全的,在插入和删除元素时会进行拆箱和装箱问题,影响性能,效率低。

    三、泛型List

    泛型List具有以下的特点:

    1. List是ArrayList的泛型类。
    2. 泛型List需要在声明时指定具体的类型。
    3. 泛型List没有装箱和拆箱操作,因此List比ArrayList效率高而且类型安全。

    四、双向链表(LinkedList)

    双向链表具有如下特点:

    1. 链表的节点在内存中的空间是不连续的,每块空间称作一个节点,每个节点都存有一个前驱和后置指针,分别指向前一个节点和后一个节点,因此向链表中添加和删除元素的效果高,只需要更改相应节点的指针指向即可。
    2. 链表的查找效率低。查找元素时不能通过下标进行访问,只能从头开始通过地址按顺序查找。

    五、堆栈(Stack)

    堆栈具有如下特点:

    1. 堆栈是先进后出的原则,最先插入的元素最后被访问,最后插入的元素最先被访问。
    2. Push入栈,Pop出栈并返回栈顶元素,Peek只返回栈顶元素。

    六、Queue(链表)

    链表具有以下特点:

    1. 链表是先进先出的原则,最先进入的元素最先被访问,最后进入的元素最后被访问。
    2. Enqueue入队列,Dequeue出队列并返回列首元素,Peek只返回列首元素。 

    七、字典(Dictionary)

    字典具有以下特点:

    1. 创建字典时需要指定key和value的数据类型。
    2. 字典中的key值是唯一的,value的值可以不唯一。
    3. 可以通过key快速查找对应的value,速度快,但是消耗内存。

    二、几种常见数据结构的使用情景

    Array 需要处理的元素数量确定并且需要使用下标进行访问时可以考虑,不过建议使用List<T>。
    ArrayList 不推荐使用,建议使用泛型List<T>。
    泛型List<T> 需要处理的元素数量不确定时,通常建议使用。
    LiskedList<T> 链表适合元素数量不固定,而且需要经常增减节点的情况,链表增减元素效率高。
    Queue<T> 队列适合于先进先出的情况。
    Stack<T> 堆栈适合于先进后出的情况。
    Dictionary<K,T> 字典适合于需要键值对操作的情况。
  • 相关阅读:
    maven部署tomcat项目,403错误解决
    Android 常见问题收集 (持续更新)
    android 图片进度条
    jquery 监听radio选中,取值
    [转] 解决HttpServletResponse输出的中文乱码问题
    国内外最全的asp.net开源项目 (转)
    c# 模拟 网页实现12306登陆、自动刷票、自动抢票完全篇(转)
    C#网页自动登录和提交POST信息的多种方法(转)
    C# 网页自动填表自动登录(转)
    23个.NET开源项目
  • 原文地址:https://www.cnblogs.com/dotnet261010/p/12333598.html
Copyright © 2011-2022 走看看