zoukankan      html  css  js  c++  java
  • C# 集合

    集合分为线性集合和非线性集合。


     

    线性集合:元素具有唯一的前驱和后驱的数据结构类型。

    1、直接存储:该类型的集合数据元素可以直接通过下标index来访问(Array(数组、List<T>),string,struct)。

    • 优点:向数据结构中添加元素很高效,直接放在数据末尾的第一个空位上就可以了。
    • 缺点:插入元素低效,需要给插入的元素腾出位置并顺序移动后面的元素。
    • 数组和List<T>的选择:如果集合的数目固定并且不涉及转型,使用数组效率高,否则使用List<T>。

    2、顺序存储:即线性表,可动态地扩大和缩小,在一片连续的区域中存储数据元素(队列Queue<T>,栈Stack<T>,索引群集(字典Dictionary<TKey,TValue>、双向链表LinkedList<T>))。

    • 缺点:不能按照索引进行查找元素,查找效率相对低。需要通过对地址的引用来搜索元素,为了找到某个元素,线性表必须遍历所有元素,直到找到对应的元素为止。
    • 优点:插入和删除数据效率高。
    • 队列Queue<T>:遵循先入先出的模式,在集合末尾添加元素,在集合的起始位置删除元素,可以用于处理消息队列等场景。
    • 栈Stack<T>:遵循后入先出的模式,在集合末尾添加元素,同时也在集合末尾删除元素。
    • 字典Dictionary<TKey,TValue>:存储键值对,值在基于键的散列码的基础上进行存储,可以根据建进行值的查找。
    • 双向链表LinkedList<T>:是一个类型为LinkedListNode的元素对象的集合。当护额的在集合中插入和删除数据很慢时,可以考虑使用链表。

     


     

    非线性集合:既有多个前驱和后驱的数据结构类型。

    1、层次集合:树

    2、组集合:集HashSet<T>、图。

    • 集HashSet<T>:存放在集合中的元素是无序且唯一。

     

    以上的集合类型的扩展:

    1、将无序排列的元素变为有序排列。

    • SortedList<T> 对应 List<T>
    • SortedDictionary<TKey,TValue> 对应 Dictionary<TKey,TValue>
    • StoredSet<T>  对应 HashSet<T>

    2、线程集合类:被用于多线程,保证线程安全

    • ConcurrentBag<T> 对应 List<T>
    • ConcurrentDictionary<TKey,TValue> 对应 Dictionary<TKey,TValue>
    • ConcurrentQueue<T>  对应 Queue<T>
    • ConcurrentStack 对应 Stack<T>

    参考:《编写高质量代码改善C#程序的157个建议》陆敏技

  • 相关阅读:
    BERT 简介 P1_李宏毅
    GAN_P4 Learning from Unpaired Data_李宏毅
    GAN_P3_李宏毅
    Generation P1_李宏毅
    GAN_P2_Theory behind GAN_李宏毅
    李宏毅_Transformer p2
    李宏毅_Transformer p1
    强类型数据集 官方教程
    网页管理系统一
    读张子阳的用户验证自定义IPrincipal和IIdentity有感
  • 原文地址:https://www.cnblogs.com/xuyouyou/p/13175590.html
Copyright © 2011-2022 走看看