• C# 基础至集合-数组、List<T>、ArrayList、LinkedList、HashMap的一些区别


    1:数组

     1 string[] strs = new string[5];
     2 //赋值
     3 strs[0] = "0";
     4 strs[1] = "1";
     5 //修改
     6 strs[1] = "burg";
     7 //删除  没法删除 除非转化为可变数组list<string>
     8 
     9 //取值
    10  string str = strs[0];

    优点:数组是定义的是  是分配在一段连续的内存空间上,且大小确定,这样是的数组的索引效率非常高,只要偏移地址就可以快速访问元素,所以数组的查询,赋值,更新 效率较高 复杂度o(1)

    缺点:犹豫数组分配在一段连续的地址上  所以导致 存储效率较低,在插入 和删除 元素的时候 比较麻烦  如果插入一个元素 会导致插入元素后面的元素 位置全部移动,删除也是同理

    2:ArrayList

               ArrayList arrayList = new ArrayList();
                //赋值
                arrayList.Add(1);
                arrayList.Add("string");
                arrayList.Add(true);
                //修改
                arrayList[0] = 2;
                //删除
                arrayList.RemoveAt(3);//删除第三个元素
                //指定索引插入元素
                arrayList.Insert(1, "ABC");
                //取值
                string a = (string)arrayList[0];

    优点:继承了IList 接口   提供了很多便捷的方法去操作数组,数组的长度可变不在固定

    确点:数组里面的数据类型 不唯一 到是使用的时候 数据类型不安全 ,取值出来的时候 都是object 类型,使用的时候会导致很多 装箱 拆箱的问题 ,导致性能的损耗

    3:List<T> 

                List<string> list = new List<string>();
                list.Add("burg");
                list.Add("xun");
    
                list[1] = "A";
    
                list.RemoveAt(1);
                list.Insert(1, "B");
    
                string listStr = list[0];

    泛型List:同样继承了IList 接口  提供了方便的 操作数组的方法,同时规定了 集合类型  使得数据类型安全  避免了装箱拆箱的问题

    数组集合。 查询、修改、新增(尾部新增)快,删除、新增(队列中间)慢,适用于查询、修改较多的场景

    4:HashTable(哈希表)、Dictionary<T,T>

    HashTable是一种根据key查找非常快的键值数据结构,不能有重复key,而且由于其特点,其长度总是一个素数,所以扩容后容量会比2倍大一点点,加载因子为0.72f。

    当要大量使用key来查找value的时候,HashTable无疑是最有选择,HashTable与ArrayList一样,是非泛型的,value存进去是object,存取会发生装箱、拆箱,所以出现了Dictionary<T,T>。

    Dictionary<T,T>是HashTable的泛型版本,存取同样快,但是不需要装箱和拆箱了。而且,其优化了算法,Hashtable是0.72,它的浪费容量少了很多。

    5:ListDictionary(单向链表),LinkedList<T>(双向链表)

    List<T>,ArrayList,Hashtable等容器类,其内部维护的是数组Array来,ListDictionary和LinkedList<T>不用Array,而是用链表的形式来保存。链表最大的好处就是节约内存空间。

    ListDictionary是单向链表。

    LinkedList<T>双向链表。双向链表的优势,可以插入到任意位置。

    6:HashSet<T>

    HashSet<T>类,算法,存储结构都与哈希表相同,主要是设计用来做高性能集运算的,例如对两个集合求交集、并集、差集等。集合中包含一组不重复出现且无特定顺序的元素。

    ArrayList,List<T>:变长数组;

    HashTable,Dictionary<T,T>:频繁根据key查找value;

    HashSet<T>:集合运算;

    Queue、Queue<T>:先进先出;

    Stack、Stack<T>:堆栈,先进后出;

    SortedList、SortedList<TKey,TValue>:哈希表,要通过下标,又要通过key取值时,可选用;

    ListDictionary:单向链表,每次添加数据时都要遍历链表,数据量大时效率较低,数据量较大且插入频繁的情况下,不宜选用。

    LinkedList<T>:双向链表;

    HybridDictionary:未知数据量大小时,可用。

    SortedDictionary<TKey,TValue>:SortedList<TKey,TValue>的优化版,内部数组转平衡二叉树。

    BitArray:二进制运算时可选用;

     

    内容引用于:https://blog.csdn.net/wildlifeking/article/details/58605587

  • 相关阅读:
    JMeter4.0的单机压测和集群压测简介
    接口自动化测试,完整入门篇
    jmeter实战---正则提取器
    压测必经之路,解读JMeter分布式
    JMeter线程组参数含义
    jmeter生成HTML性能测试报告
    SPP-Net、Atrous Convolution以及ASPP by Rose
    使用CNN进行角度估计
    Java相关书籍分享
    Code Conventions for the Java
  • 原文地址:https://www.cnblogs.com/burg-xun/p/11738811.html
Copyright © 2020-2023  润新知