C# 数组结构
数组结构:
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# 数组结构的更多相关文章
- jquery类数组结构学习笔记
大家都知道我们使用$()产生的jquery对象可以使用下标去获取对应下标的元素. 举个栗子,一个页面有5个div标签,我们使用$("div")去获取到这些元素,然后我们就可以使用$ ...
- java实现无序数组结构
一.数组的2种定义方式 数据类型 [] 数组名称 = new 数据类型[数组长度]; 这里 [] 可以放在数组名称的前面,也可以放在数组名称的后面,一般放在名称的前面 数据类型 [] 数组名称 = ...
- Array数组结构底层实现复习
Array数组结构底层实现复习 内容待总结: size capacity length
- JS 树形结构与数组结构相互转换、在树形结构中查找对象
总是有很多需求是关于处理树形结构的,所以不得不总结几个常见操作的写法.¯\_(ツ)_/¯ 首先假设有一个树形结构数据如下 var tree=[ { 'id': '1', 'name': '教学素材管理 ...
- JS数据结构与算法-数组结构
数组结构 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构. 数组通常情况下用于存储一系列同一种数据类型的值. 但在JavaScript里,也可以在数组中保存不同类型的值. 但我们 ...
- C语言基础知识点整理(函数/变量/常量/指针/数组/结构体)
函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...
- C数组&结构体&联合体快速初始化
背景 C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序. C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组某些元 ...
- c++ 数组 结构体
接下来的一点时间我将会记录下我看的c++的一些心得体会,人贵在坚持,希望我可以一直坚持下去!!Go Fighting! 一.c++复合数据类型: 数组类型的一些注意事项: sizeof的用法: 当 ...
- C89,C99: C数组&结构体&联合体快速初始化
1. 背景 C89标准规定初始化语句的元素以固定顺序出现,该顺序即待初始化数组或结构体元素的定义顺序. C99标准新增指定初始化(Designated Initializer),即可按照任意顺序对数组 ...
随机推荐
- JVM内存模型分析(一个程序运行的例子)
(.class字节码)类加载到内存之后,内存模型:(ps:.class文件可以通过javap 指令反编译成一个可读文件) 1.java栈,本地方法栈,程序计数器(每个线程私有) 看如下程序: 以该程序 ...
- html注意事项
行级元素只能嵌套行级元素 块级元素可以嵌套任何元素 格力 p标签不能嵌套div a标签不能嵌套a标签
- GraphQL ---02 GraphQL和C#结合的实战项目
本文章是介绍和记录如何创建GraphQL项目,以及如何使用GraphQL进行数据的相关操作.项目参照GraphQL .Net 的官方文档进行实践 一.项目结构: 为了更好的和原有的项目结合在一起,尽可 ...
- java项目----衣服购买
执行bat文件:注意t_temp.properties保存的文件是否为utf8编码native2ascii -encoding UTF-8 t_temp.properties r.properties ...
- kubernets helm 如何删除tiller
https://stackoverflow.com/questions/53612553/how-to-uninstall-remove-tiller-from-kubernetes-manually ...
- JS中的位操作在实际项目中的应用
前言: Linux中的文件管理子系统的权限管理,想必大家都知道:rwx分别代表read(可读),write(可写), execute(可执行,如果是可执行程序的话),其中rxw可以按照数字表示: r ...
- 数据分析入门——numpy类库基础知识
numpy类库是数据分析的利器,用于高性能的科学计算和数据分析.使用python进行数据分析,numpy这个类库是必须掌握的.numpy并没有提供强大的数据分析功能,而是它提供的ndarray数据结构 ...
- 异步简析之BlockingCollection实现生产消费模式
目前市面上有诸多的产品实现队列功能,比如Redis.MemCache等... 其实c#中也有一个基础的集合类专门用来实现生产/消费模式 (生产模式还是建议使用Redis等产品) 下面是官方的一些资料和 ...
- 安装pwntools
使用手册 http://pwntools.readthedocs.io/en/stable/ 环境 全新的ubuntu 14.04 64位 py2.7 实测ubuntu 18.04 64位同样适用 过 ...
- java使用Jedis远程访问CentOs7linux时出现拒绝连接的错误
使用Jedis出现Connection refused的解决方案 当我们利用Jedis操作服务器的Redis数据库时,需要先将远程服务器的端口(默认端口是6379)开放,命令如下: #/sbin/ ...