1:数组

 string[] strs = new string[];
//赋值
strs[] = "";
strs[] = "";
//修改
strs[] = "burg";
//删除 没法删除 除非转化为可变数组list<string> //取值
string str = strs[];

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

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

2:ArrayList

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

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

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

3:List<T> 

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

泛型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

C# 基础至集合-数组、List<T>、ArrayList、LinkedList、HashMap的一些区别的更多相关文章

  1. arrayList LinkedList HashMap HashTable的区别

    ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦 LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一 ...

  2. jdk集合常用方法分析之ArrayList&LinkedList&以及两者的对比分析

    集合使用注意事项: 1.集合当中只能放置对象的引用,无法放置原生数据类型,我们需要使用原生数据类型的包装类才能加入到集合当中去(JDK5之后会进行自动的装箱和拆箱操作,表面上看集合中是可以直接放置原生 ...

  3. 基础知识系列☞C#中数组Array、ArrayList和List三者的区别

    数组() #region 数组 //初始化方式_0:先声明再赋值 ]; weekDays_0[] = "Sun"; weekDays_0[] = "Mon"; ...

  4. Collectio集合,List《ArrayList,LinkedList》

    集合: Collection类 package com.collection.demo; import java.util.ArrayList; import java.util.Arrays; im ...

  5. Java 集合的简单实现 (ArrayList & LinkedList & Queue & Stack)

    ArrayList 就是数组实现的啦,没什么好说的,如果数组不够了就扩容到原来的1.5倍 实现了迭代器 package com.wenr.collection; import java.io.Seri ...

  6. vector与ArrayList、hashmap与hashtable区别

    一.vector与ArrayList区别     首先要说明的是vector和arraylist都是list的实现类,都是代表链表的数据结构.     java.util.Vector;  类中 pa ...

  7. JDK1.7源码阅读tools包之------ArrayList,LinkedList,HashMap,TreeMap

    1.HashMap 特点:基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 Has ...

  8. ArrayList LinkedList Vector之间的区别

    List主要有ArrayList,LinkedList和vector三种实现.这三种都实现了List接口,使用方式也很相似,主要区别在于其实现方式的不同! 这三种数据结构中,ArrayList和Vec ...

  9. Java基础系列--集合之ArrayList

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8494618.html 一.概述 ArrayList是Java集合体系中最常使用,也是最简单 ...

随机推荐

  1. 068.Python框架Django之DRF视图集使用

    一 视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() ...

  2. Linux命令与Shell

    Linux 目录结构及解释 查看命令行执行完位置:  echo $BASH 命令记录 mkdir mkdir命令 用来创建目录. 语法:mkdir (选项)(参数) 主要选项: -m<目标属性& ...

  3. Java 基础讲解

    Hello,老同学们,又见面啦,新同学们,你们好哦! 在看完本人的<数据结构与算法>专栏的博文的老同学,恭喜你们在学习本专栏时,你们将会发现好多知识点都讲解过,都易于理解,那么,没看过的同 ...

  4. IN612 IN612L蓝牙5.0 SoC芯片替换NRF52832/NRF52840

    IN612L是美国公司INPLAY的SOC产品系列之一,具有多模协同2.4G无线协议栈,支持2.4G私有协议栈以及蓝牙5.0全协议栈的SOC芯片.如2mbps高数据速率模式,125kbps/500kb ...

  5. Java 自定义注解及注解读取解析--模拟框架生成SQL语句

    假设们使用一张简单的表,结构如下: 定义注解: 表注解: package com.xzlf.annotation; import java.lang.annotation.ElementType; i ...

  6. MySQL中出现Unknow column 'xx' in field list的解决办法

    首先创建一个表,然后插入数据发现出错误 经过多次尝试发现title前面多了一个空格 我们把空格去掉,然后在插入数据,发现数据创建成功

  7. [Abp vNext 入坑分享] - 4.JWT授权的接入

    一.感想 在写这一系列文章之前,本来以为写这个之前已经搭建好的框架描述会比较简单,但是慢慢写下来才发现.写这个真的不简单额,本来以为图文一起,一个晚上应该能输出一篇吧...结果:现实真的骨感,一个星期 ...

  8. sqli lab less-5-6

    less-5 基于报错的注入 基于报错可以爆出当前数据库名等等 id=2' and extractvalue(1, concat(0x7c,(select user())));-- # ?id=2' ...

  9. js 随机数生成器

    title: js 随机数生成器 js 随机数生成器 js 随机数生成器 确定产生随机数的数目,最小值和最大值: 个数: 最小值: 最大值: 是否为唯一的随机数: 唯一 允许重复 点击生成产生随机数: ...

  10. Spring5参考指南:Bean的生命周期管理

    文章目录 Spring Bean 的生命周期回调 总结生命周期机制 startup和Shutdown回调 优雅的关闭Spring IoC容器 Spring Bean 的生命周期回调 Spring中的B ...