zoukankan      html  css  js  c++  java
  • c#的几种数据结构

    Array/ArrayList/List/LinkedList/Queue/Stack/HastSet/SortedSet/Hashtable/SortedList/Dictionary/SortedDictionary

    数组(在内存上连续分配,读取快,增删改慢,可坐标访问)

    一:Array-----在内存上连续分配的,而且元素类型是一样的,可以坐标访问,读取快,增删改慢,长度不变

    二:ArrayList------不定长度,连续分配的,元素没有类型限制,任何元素都是当作 object处理,如果是值类型会有装箱操作,索引赋值不会增加长度会出错

    三:List-------核心本质也是Array,内存上都是连续摆放不定长的(连续摆放的都可以用索引访问),泛型(保证类型安全避免装箱拆箱)

    链表(元素不连续分配每个元素都有记录前后节点,增删快,查慢)

    四:LinkedList--------泛型的特点,元素不连续分配,每个元素都有记录前后节点,不能下标访问,找元素就只能遍历,查找不方便,增删方便

    LinkedList<int> linkedList = new LinkedList<int>();
    //linkedList[3]  不可下标访问
    linkedList.AddFirst(123);   添加方式
    linkedList.AddLast(456);

    bool isContain = linkedList.Contains(123);
    LinkedListNode<int> node123 = linkedList.Find(123); //元素123的位置 从头查找
    linkedList.AddBefore(node123, 123); 
    linkedList.AddAfter(node123, 9);

    linkedList.Remove(456);
    linkedList.Remove(node123);
    linkedList.RemoveFirst();
    linkedList.RemoveLast();
    linkedList.Clear();

    五:Queue------先进先出,可用来放任务延迟执行(A不断写入B不断获取)

         1:Dequeue方法是移除,Peek方法不移除

    六:Stack-------先进后出

         1:Pop方法是移除,Peek方法不移除

     集合(Hash分布,元素间没关系,动态增加容量,去重)

    七:HashSet-------可用在间接关注/粉丝合集

    1. hashSet1.SymmetricExceptWith(hashSet);//补
    2. hashSet1.UnionWith(hashSet);//并
    3. hashSet1.ExceptWith(hashSet);//差
    4. hashSet1.IntersectWith(hashSet);//交

    八:SortedSet-----可排序

    Key-Value(增删改快,浪费了空间,数据量大的话效率会低,非线程安全)

    九:Hashtable------key-value形式,无序,体积可以动态增加,拿着key计算一个地址然后放入key-vlaue,都是object有装箱拆箱,如果不同的key得到相同的地址,第二个在前面的地址上+1,查找 的时候如果地址对应的数据Key不对就+1查找;浪费了空间,如果数据太多重复定位效率就下去了,是基于数组实现,增删查改数据一次定位速度快。线程安全(只有一个线程写多个线程读)

    十:Dictionary------有序,数据太多的话效率就会下降,非线程安全,ConcurrentDictionary这个是线程安全的字典

    十一:SortDictionary-----排序

    十二:SortedList-------排序,不能Add()重复添加相同的key

    线程安全的

    ConcurrentQueue 线程安全版本的Queue
    ConcurrentStack线程安全版本的Stack
    ConcurrentBag线程安全的对象集合
    ConcurrentDictionary线程安全的Dictionary
    BlockingCollection

    如果实现了IList了的就可以用下标访问,实现IConllection了的可以用Add添加

  • 相关阅读:
    爬虫|如何在Pycharm中调试JS代码
    nexus 6p 输入8.1和获取root权限
    年近30的我,离开了北京,回家做个老百姓,等待那一刻的发生!
    Azure认知服务的实际应用-资讯采集推送
    C#类库推荐 拼多多.Net SDK,开源免费!
    [翻译]EntityFramework Core 2.2 发布
    4-如何学习和解决问题
    3-WIN10系统及开发工具支持
    2-选择学习的目标和方向
    1-编程的基本条件和起步
  • 原文地址:https://www.cnblogs.com/w1-y2-q5/p/10481639.html
Copyright © 2011-2022 走看看