数组结构:

Array :在内存上是连续分配的,而且元素类型是一致的;

特点:是读取快 可以坐标访问 但是增删慢,长度不能变

比如 int[] intArray=new int[20]; intArray[3]=10;

ArrayList:在内存上是连续分配的,元素没有类型限制,任何元素都是当成object处理的,如果是值类型,会有装箱操作

不定长度的  Add增加长度 索引赋值不会增加长度;读取快  增删慢;

ArrayList arrayList=new ArrayList();

arrayList.Add("001");

arrayList.Add("002");

arrayList.Remove("Eleven");

array[2]=32;

//删除数据

List:核心也是Array 内存上是连续分配的 可以用索引访问 不定长度 ;泛型,保证类型安全,避免装箱拆箱;读取快,增删慢;

List<string> stringList=new List<string>();

stringList.Add("001");

链表类型

LinkedList:泛型的,链表 元素不连续分配,每个元素都有记录前后节点;

不能通过坐标访问, 找元素,只能遍历,查找不方便;增删比较方便;

LinkedList<int> linkedList=new LinkedList<int>();

linkedList.AddFirst(1);

linkedList.AddLast(10);

bool isContain=linkedList.Contains(123);

LinkedListNode<int> node123=linkedList.Find(123);

linkedList.AddBefore(node123,10);

linkedList.AddAfter(node123,11);

linkedList.Remove(123);

linkedList.RemoveFirst();

linkedList.RemoveLast();

Queue: 队列,就是链表, 先进先出, 如任务延迟执行,A不断地写入任务 B不断获取任务去执行;

Queue<int> numbers=new Queue<int>();

numbers.Enqueue(1);

numbers.Enqueue(2);

numbers.Enqueue(3);

numbers.Dequeue();//移除

numbers.Peek();//不移除

Stack: 栈,是链表, 先进后出

Stack<int> numbers=new Stack<int>();

numbers.Push(1);

numbers.Push(2);

numbers.Push(3);

numbers.Push(4);

numbers.Pop();//读取并移除

numbers.Peek();//读取不移除

集合Set

HashSet:hash分布 元素间没有关系 动态增加的 会自动去重 不是连续分布 不能用索引坐标访问

统计用户IP,IP投票;还可以做交叉并补的集合

HashSet<int> hashSet=new HashSet<int>();

hashSet.AddFirst(1);

hashSet.AddFirst(1);

hashSet.AddFirst(2);

hashSet.AddFirst(3);

hashSet.AddLast(10);

HashSet<int> hashSet1=new HashSet<int>();

hashSet1.AddFirst(1);

hashSet1.AddFirst(2);

hashSet1.AddLast(3);

hashSet1.AddLast(7);

hashSet1.IntersectWith(hashSet);//交集 1、2、3

hashSet1.UnionWith(hashSet);//并集1、2、3、7、10

hashSet1.ExceptWith(hashSet);//差集 10

hashSet1.SymmetricExceptWith(hashSet);//补集 7

*交叉并补只能执行一次*

SortedSet:排序的集合,可以去重加排序;也可以做交叉并补

SortSet<int> sortSet=new SortSet<int>();

sortSet.AddFirst(1);

sortSet.AddFirst(1);

sortSet.AddFirst(2);

sortSet.AddFirst(3);

sortSet.AddLast(10);

Key-Value

HashTable:key—value 体积可以动态增加 拿着key计算一个地址,然后放入key-value

object-装箱拆箱 如果是不同的key得到相同的地址,第二个在前面地址上+1

查找的时候,如果地址对应的数据key不对,那就+1查找。。

浪费了空间 基于数组实现

查找数据 一次定位 增删 一次定位;增删改查 都很快

浪费空间,数据太多 重复定位 效率就下去了

HashTable table=new HashTable();

table.Add("1","0001");

table.Add("2","0004");

table["3"]="0003";

线程安全

Hashtable.Synchronized(table);//只有一个线程写 多个线程读

Dictionary:泛型 key-value 读写增删改查都很快 有序的

Dictionary<int,string> dic=new Dictionary<int,string> ();

dic[1]="1";

SortedDictionary:泛型 key-value 读写增删改查都很快 有序的

SortedDictionary<int,string> dic=new SortedDictionary<int,string> ();

dic[1]="1";

SortedList:泛型 key-value 读写增删改查都很快 有序的 按照key排序

SortDictionary<int,string> dic=new SortDictionary<int,string> ();

dic[1]="1";

ILIst、IQueryable、IEnumerable、ICollection

接口是标识功能的,不同的接口拆开,为了接口隔离,尽管有重复

IList 可以下标访问

IEnumerable 遍历才会查询比较 迭代器yield  任何数据集合 都实现了不同的数据结构,提供了统一的访问接口 yield访问模式

IQueryable 表达式目录树解析 延迟到遍历的时候才会去执行

C# 数组结构的更多相关文章

  1. jquery类数组结构学习笔记

    大家都知道我们使用$()产生的jquery对象可以使用下标去获取对应下标的元素. 举个栗子,一个页面有5个div标签,我们使用$("div")去获取到这些元素,然后我们就可以使用$ ...

  2. java实现无序数组结构

    一.数组的2种定义方式 数据类型 []  数组名称 = new 数据类型[数组长度]; 这里 [] 可以放在数组名称的前面,也可以放在数组名称的后面,一般放在名称的前面 数据类型 [] 数组名称 = ...

  3. Array数组结构底层实现复习

    Array数组结构底层实现复习 内容待总结: size capacity length

  4. JS 树形结构与数组结构相互转换、在树形结构中查找对象

    总是有很多需求是关于处理树形结构的,所以不得不总结几个常见操作的写法.¯\_(ツ)_/¯ 首先假设有一个树形结构数据如下 var tree=[ { 'id': '1', 'name': '教学素材管理 ...

  5. JS数据结构与算法-数组结构

    数组结构 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构. 数组通常情况下用于存储一系列同一种数据类型的值. 但在JavaScript里,也可以在数组中保存不同类型的值. 但我们 ...

  6. C语言基础知识点整理(函数/变量/常量/指针/数组/结构体)

    函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...

  7. C数组&结构体&联合体快速初始化

    背景 C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序. C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组某些元 ...

  8. c++ 数组 结构体

    接下来的一点时间我将会记录下我看的c++的一些心得体会,人贵在坚持,希望我可以一直坚持下去!!Go Fighting!   一.c++复合数据类型: 数组类型的一些注意事项: sizeof的用法: 当 ...

  9. C89,C99: C数组&结构体&联合体快速初始化

    1. 背景 C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序. C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组 ...

随机推荐

  1. 初学python之路-day12

    本篇补上字符串的比较:按照从左往右比较每一个字符,通过字符对应的ascii进行比较 一.函数默认值的细节 # 如果函数的默认参数的默认值为变量,在所属函数定义阶段一执行就被确定为当时变量存放的值 a ...

  2. inotify+rsync文件实时同步报错:usr/local/bin/inotifywait: error while loading shared libraries: libinotifytools.so.0:

    解决办法: ln -sv /usr/local/lib/libinotify* /usr/lib/ /usr/lib64/libinotifytools.so.

  3. Python3——MP3播放器

    sql # 创建数据库 CREATE DATABASE `music_player` CHARACTER SET 'utf8'; # 创建MP3音乐文件的表 CREATE TABLE mp3_file ...

  4. CF 552 Neko does Maths

    给出两个数a,b 求k     使得 a+k b+k有最小公倍数 a,b同时加上一个非负整数k,使得,a+k,b+k的最小公倍数最小 因为最小公公倍数=x*y / gcd(x,y),所以肯定离不开最大 ...

  5. FastStone Capture(FSCapture)

    FastStone Capture(FSCapture) 注册码 企业版序列号: name:bluman serial/序列号/注册码:VPISCJULXUFGDDXYAUYF FastStone C ...

  6. 网络对抗技术 20165220 Exp3 免杀原理与实践

    实验任务 1 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧: 2 通过组合应用各种技术实现恶意代码免杀(1 ...

  7. 2018-2019-2 网络对抗技术 20165220 Exp2 后门原理与实践

    实验内容 1.使用netcat获取主机操作Shell,cron启动2.使用socat获取主机操作Shell, 任务计划启动3.使用MSF meterpreter(或其他软件)生成可执行文件,利用nca ...

  8. [enum]enum的用法

    ENUM概况 enum枚举类型是C/C++中的一种数据类型,与struct和class一样是用户自定义的类型,其特点在于enum类型的变量取值是有限的,是可以一一列举出来的. ENUM定义 C++ e ...

  9. sublime text 3启动报错"swallow_startup_errors"解决方法

    启动sublime text 3报错: anaconda插件连接jsonserver服务出现错误 解决方法: 首选项 -- package settings -- Anaconda -- settin ...

  10. Ubuntu 服务器设置软件多用户访问

    假设在用户A下安装了软件xx 路径写入$home/.bashrc 这时该软件只有该用户可以使用 若要其他用户也能使用,只需要将该.bashrc拷贝到其他user的$home目录就行了