C#集合

 

集合(Collection)类是专门用于数据存储和检索的类,集合也可以称为数据结构;

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集       合

非关联性集合就是不用key操作的一些集合类,通常我们可以用元素本身或者下标来操作。关 联性集合类即我们常说的键值对集合,允许我们通过Key来访问和维护集合。

非泛型集合(Collection)

ArrayList集合:

ArrayList是基于数组实现的,是一个动态数组,其容量能自动 增长

ArrayList的命名空间System.Collections

HashTable 关联性集合,键值对集合

Queue 队列,先进先出

SortedList 自动排序的关联性集合,键值对集合。

Stack 栈,先进后出

 

泛型集合(Generic Collection)

List<T> 索引列表,动态数组

LinkedList<T>链表,双向链表

Queue<T>队列,先进先出

Stack<T>栈,先进后出

Dictionary<TKey,TValue>字典,键值对集合,内部用哈希表来存储数据,所以是无序的;

SortedDictionary<TKey,TValue>键值对集合,内部是用二叉树来存储数据,按键来排序;

SortedList<TKey,TValue>键值对集合,内部结构使用数组来存储的;

 

List<T>索引列表,通过下标访问元素,动态数组

List<int> arr=new List<int>();//容量=0,count=0;

   List<string> arr=new List<string>(10);// 容 量 =10,count=0;

   List<bool> arr=new List<bool>(new bool[10]);//容量=10,count=10

方法:

 Add():添加元素

IndexOf():搜索,返回第一个匹配项索引

LastIndexOf():搜索,返回最后一个匹配项索引

Sort():排序

Reverse():倒序

Contains():判断是否存在

Insert():插入

Remove():删除最后一个元素

RemoveAt() :删除制定指定位置元素

Find()   :搜索,并返回第一个匹配项

Dictionary字典

关联性集合,键值对集合,通过键访问值,每个元素都是一个键值对; 查字典:搜索改字的页码,根据页码找到该字解释;

苹果   大厦

京基100   水果

【(a)(b)(c)(d)】

字典里面的每个元素都是一个键值对键值对:键-值

字典集合【(1001,“苹果”),(1003,"西瓜")】

Dictionary的定义格式:

Dictionary<键类型,值类型> arr=new Dictionary<键类型,值类型

>();

属性:

Count元素个数

Keys:返回键的集合

Values:返回值的集合索引器:

字典对象[键]返回值方法:

Add(键,值);

Clear()清空所有元素

ContainsKey(Tkey key)检索键是否存在,存在返回true,反之false ContainsValue(TValue value)检索值是否存在,存在返回tue,反之false

Remove(Tkey key)根据键删除元素;

访问元素方式:

int ID=1001;

for (var i = 0; i < arr.Count; i++) { 

  Console.WriteLine(arr[ID + i]);

}

//foreach ...in:访问键

foreach (int key in arr.Keys) {

  Console.WriteLine("键:" + key);

}

//访问值

foreach (string value in arr.Values)

{

  Console.WriteLine("值:" + value);

}

//访问键值对

foreach (KeyValuePair<int,string> obj in arr)

{

  Console.WriteLine("键:{0},值:{1}",obj.Key,obj.Value);

}

foreach (var obj in arr)

{

  Console.WriteLine("键:{0},值:{1}", obj.Key, obj.Value);

}

注意:键不可以重复,键不可以为null;

Queue队列:先进先出属性

Count返回元素的个数方法

Enqueue(T value)添加元素到集合的尾部

Dequeue()删除并返回集合第一个元素

Peek()返回集合第一个元素

Contains(T value)检索元素是否存在,返回true,否则false

ToArray()返回一个相同类型的一维数组

TrimExcess()缩小容量为实际元素个数的大小,减少内存占用

 

Stack栈:先进后出,后进先出

属性:Count返回元素的个数方法

Push(T value)添加元素到集合的首位

Pop()删除并返回集合第一个元素

Peek()返回集合第一个元素

Contains(T value)检索元素是否存在,返回true,否则false

ToArray()返回一个相同类型的一维数组

TrimExcess()缩小容量为实际元素个数的大小,减少内存占用

 

LinkedList链表:双向链表

First:保存第一个节点

Last:保存最后一个节点[nodeA,nodeB,nodeC,nodeD] nodeA:value="",up=null;next=nodeC;

//nodeB:value="",up=nodeA,next=nodeC; nodeC:value="",up=nodeA,next=nodeD;

 

LinkedList里面每个元素都是一个LinkedListNode LinkedListNode:

List:返回该节点所在的集合

Next:返回下一个节点

Previous:返回上一个节点

Value:返回存储数据属性:

Count返回元素个数

First返回链表中第一个节点

Last返回链表中最后一个节点方法:

AddFirst(T value)在第一个位置添加一个节点,并把value保存到节点中

AddLast(T value)在尾部添加一个节点,并把value存储到该节点中Remove(T value)删除查找到的第一个元素

RemoveFirst()删除第一个节点

RemoveLast()删除最后一个节点

Contains(T value)检索value是否存在,存在返回true,否则返回false

Find(T value)返回第一个检索到存储了value的节点FindLast(T value)返回最后一个检索到存储了value的节点

AddAfter(LinkedListNode node,LinkedListNode newnode) 在node后面添加一个newNode;

AddBefore(LinkedListNode node,LinkedListNode newnode) 在node前面添加一个newNode

AddFirst(node)在第一个位置添加一个节点

AddLast(node)在最后一个位置添加一个节点

Rmove(node)删除指定节点

 

SortedDictionay<key,value>

有序的键值对集合,跟字典非常相似; SortedList<key,value>

有序的键值对集合,内部存储用数组存储SortedSet<T>

有序集合,非关联性集合

时间复杂度

时间复杂度是一个函数,它定量描述了该算法的运行时间。

常见的时间复杂度有以下几种。

1,log(2)n,n,n log(2)n ,n的平方,n的三次方,2的n次方,n!

1指的是常数。即,无论算法的输入n是多大,都不会影响到算法的运 时间。这种是最优的算法。而n!(阶乘)是非常差的算法。当n变大 时,算法所需的时间是不可接受的。

用通俗的话来描述,我们假设n=1所需的时间为1秒。那么当n = 10,

000时。

O(1)的算法需要1秒执行完毕。

O(n)的算法需要10,000秒 ≈ 2.7小时 执行完毕。

O(n2)的算法需要100,000,000秒 ≈ 3.17年 执行完毕。

O(n!)的算法需要XXXXXXXX(系统的计算器已经算不出来了)。见算法的时间复杂度影响有多大。

所以O(1)和O(n)差了2.7小时,区别显而易见。

集合

顺序排

连顺

存储

直接访问方式

访问时间

操作时间

备注

Dictionary

 

Key

Key: O(1)

O(1)

访问性能最 快,不支持排

SortedDinctionar y

顺序排列

Key

Key: O(log n)

O(log n)

快速访问和支持排序的折衷

SortedList

顺序排列

Key

Key: O(log n)

O(n)

和SortedDictio

nary相似,只是内部用数据

 

 

 

 

 

 

替代树作为存

储结构。

List

使用者可以精确控制元素的

位置

Index

Index: O(1)

Value: O(n)

O(n)

最适合需要直接访问每一个元素的少量集合。

LinkedList

使用者可以精确控制元素的位置

不支持

Value: O(n)

O(1)

最适合不需要直接访问单个元素,但是在集合中添加/移除非常频繁的

场景。

HashSet

不支持

Key

Key:

O(1)

O(1)

能保持元素唯

一性的集合。

不支持排序

SortedSet

顺序排列

Key

Key: O(log n)

O(log n)

能保持元素唯一性并且支持

排序。

Stack

LIFO

只能获取顶部元素

Top: O(1)

O(1)

 

Queue

FIFO

只能获取顶部元素

Front: O(

1)

O(1

 

备注:LIFO last in first out; FIFO:first in fisrt out

集合有关网址:https://www.cnblogs.com/jesse2013/p/CollectionsInCSharp.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值