C#集合底层数据结构及使用场景

1.数组
(1)Array: 内存连续存储,节约空间,可以索引访问,读取快,增删慢,定长
(2)arrayList:不定长的,连续分配的,类型不安全,读取快—增删慢,如果是值类型,会有装箱的操作
(3)List:读取快—增删慢 底层原理是数组,内存上都是连续摆放;不定长;泛型,保证类型安全,避免装箱拆箱

  1. 链表
    非连续摆放,储存数据+地址,找数据的话只能顺序查找,读取慢,增删快
    (1) LinkedList:双向链表 增删快,查找慢
    (2) Queue: 先进先出
    (3) Stack: 先进后出
    3.集合
    纯粹的集合,容器,东西丢进去,唯一性,无序性
    (1) HashSet: hash分布,元素间没关系,动态增加容量 去重
    (2) SortedSet: 排序的集合:去重,而且排序

4 .key-VaLue
读取&增删都快? 有 hash散列 字典
key-value,一段连续空间放value(开辟的空间比用的多,hash是用空间换性能),基于key散列计算得到地址索引,这样读取快
删除也快,删除时也是计算位置,增加也不影响别人
肯定会出现两个key(散列冲突),散列结果一致key=18,可以让第二次的+1
可能会造成效率的降低,尤其时数据量大的情况下,
散列冲突:解决方案,散列结果一致key=18,可以让第二次的+1(1)
(1)Hashtable:以空间换时间,时间复杂度都为O(1)
(2)Dictionary:泛型; key-value ,增删查改,都很快,有序的 字典不是线程安全

使用场景:
(1)Queue: 放任务延迟执行,A不断写入日志任务,B不断获取任务去执行
(2)Stack:解析表达式目录树的时候,先产生的数据后使用,操作记录为命令,撤销的时候是倒叙的
(3)HashSet:1.统计用户IP: IP投票 2.交叉并补

你可能感兴趣的:(C#基础,数据结构,c#,数据结构,链表)