C# 集合类型学习
如果你掌握了一门语言的数据结构 ,那么你离掌握这门语言 也不远了
1.列表
对于list,值得一提的是 Capacity 属性,使用默认的构造函数 ,让我们用代码来说明
var intList = new List<int>();
Console.WriteLine(intList.Capacity);
//输出0 intList.Add();
Console.WriteLine(intList.Capacity);
//输出4 intList.AddRange(new List<int>(){,,,});
Console.WriteLine(intList.Capacity);
//输出8 intList.AddRange(new List<int>() { , , , });
Console.WriteLine(intList.Capacity);
//输出16 Console.Read();
说明:当往list中添加一个元素的时候,如果list.count > list.Capacity Capacity的值就会增加一倍,而程序有需要为这个list分配一个double的数值,你想想 ,如果你的一个程序是1025的大小的列表....这种让系统自动分配内存会使add操作特别的费时,因此如果你能预测你所有用列表的大小,可以在初始化的时候指定 Capacity 的值.
2.队列
特性:先进先出
高级:消息队列 看到一个类似于消息队列的例子 ,让我在想是否可以在项目中利用 ,先模拟了这个例子,记录一下 保留灵感
public class Preson
{
public string Name { get; set; } public string Age { get; set; } public string Sex { get; set; } public override string ToString()
{
return Name + " " + Age + " " + Sex;
}
}
public class PresonManager
{
private Queue<Preson> _presons = new Queue<Preson>(); public void AddPreson(Preson preson)
{
lock (this)
{
_presons.Enqueue(preson);
}
} public Preson GetPreson()
{
Preson preson = new Preson();
lock (this)
{
preson = _presons.Dequeue();
}
return preson;
} public bool IsPresonAvailable
{
get { return _presons.Count > ; }
} }
比较重要的一个类 使用异步去读取队列中的元素(消息) 如果有消息就处理,如果没有,就 while(true) 一直循环 囧 这样真的好吗 public class PresonProcess
{
private PresonProcess(PresonManager pm)
{
if(pm==null)
throw new ArgumentNullException("pm");
_presonManager = pm;
} public static void Start(PresonManager pm)
{
Task.Factory.StartNew(new PresonProcess(pm).Run);
} private PresonManager _presonManager;
public void Run()
{
while (true)
{
if (_presonManager.IsPresonAvailable)
{
Console.WriteLine("Process Preson {0}",_presonManager.GetPreson());
}
Thread.Sleep(new Random().Next()); }
}
}
class Program
{
static void Main(string[] args)
{
var pm = new PresonManager();
PresonProcess.Start(pm); for (int i = ; i < ; i++)
{
Console.WriteLine("Preson {0}",i);
pm.AddPreson(new Preson()
{
Age = i.ToString(),
Name = "Mo",
Sex = "男"
});
Thread.Sleep(new Random().Next());
} Console.Read();
}
}
3.堆栈
头进尾出
4.链表
5.字典
有一个非常有意思的类,叫做lookup,用一个类型的本身的一个元素作为key
static void Main()
{
var racers = new List<Racer>();
racers.Add(new Racer(, "Jacques", "Villeneuve", "Canada", ));
racers.Add(new Racer(, "Alan", "Jones", "Australia", ));
racers.Add(new Racer(, "Jackie", "Stewart", "United Kingdom", ));
racers.Add(new Racer(, "James", "Hunt", "United Kingdom", ));
racers.Add(new Racer(, "Jack", "Brabham", "Australia", )); var lookupRacers = racers.ToLookup(r => r.Country); foreach (Racer r in lookupRacers["Australia"])
{
Console.WriteLine(r);
} }
6.集 包含不重复元素 HashSet SortedSet
7 可观察集合 ObserveCollection<T>
8 线程安全的集合 以及管道...没看懂
C# 集合类型学习的更多相关文章
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...
- Swift学习笔记(5):集合类型
目录: 数组:Array 集合:Set 字典:Dictionary Swift提供Array(有序集合数据).Set(无序无重复集合)和Dictionary(无序键值对集合)三种基本集合类型来存储明确 ...
- 【Python学习之四】集合类型
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.字符串:字符串实际上就是字符的数组1.切片是指 ...
- redis 学习(6)-- 集合类型
redis 学习(6)-- 集合类型 set 结构 无序 无重复 集合间操作 set 集合内操作 命令 含义 sadd key memebr1 [member2...] 向集合中添加一个或多个成员 s ...
- Python学习笔记——集合类型
集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...
- 【Swift学习】Swift编程之旅---集合类型之数组(六)
swift提供了3种主要的集合类型,array,set,dictionary.本节介绍array. 数组是存储有序的相同类型的集合,相同的值可以多次出现在不同的位置. 注意: swift的Array类 ...
- Guava学习笔记:Guava新增集合类型-Bimap
BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构. 通常情况下,我们在使用Java的Map时,往往是通过key来查找value的,但是如果出现下面一种场景的情况,我们就 ...
- Guava学习笔记:Guava新增集合类型-Multimap
在日常的开发工作中,我们有的时候需要构造像Map<K, List<V>>或者Map<K, Set<V>>这样比较复杂的集合类型的数据结构,以便做相应的业 ...
- Guava学习笔记:Guava新增集合类型-Multiset
Guava引进了JDK里没有的,但是非常有用的一些新的集合类型.所有这些新集合类型都能和JDK里的集合平滑集成.Guava集合非常精准地实现了JDK定义的接口.Guava中定义的新集合有: Multi ...
随机推荐
- spring(五):AOP
AOP(Aspect Oriented Programming) 面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行OOP开发时,都是基于对组件(比如 ...
- C++-POJ3274-Gold Balanced Lineup[hash]
不是很懂? 胡乱hash #include <set> #include <map> #include <cmath> #include <queue> ...
- AcWing 两个简单的位运算操作
//是柱状数组的一个基操作 //返回n的最后一位1:lowbit(n) = n & -n //比如 x=1010 那么返回10 x=101000 返回1000 #include<bits ...
- ssh连不上的问题
新安装的ubuntu,想要ssh远程连接,发现连接不上,何解? 答 : 在ubuntu上安装ssh. sudo apt-get install openssh-server
- 图的dfs遍历模板(邻接表和邻接矩阵存储)
我们做算法题的目的是解决问题,完成任务,而不是创造算法,解题的过程是利用算法的过程而不是创造算法的过程,我们不能不能陷入这样的认识误区.而想要快速高效的利用算法解决算法题,积累算法模板就很重要,利用模 ...
- 下载图片(vue 下载图片)
downloadImg(){ const url = this.imgUrl // window.open(_this.detail.imgUrl) let xmlhttp=new XMLHttpRe ...
- 有关C/C++中,表达式计算顺序的问题,以及表达式内部变量“副作用”问题(转)
经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4, ...
- EF三种数据库操作模型比较
https://blog.csdn.net/xiongmeiqin/article/details/80196089 EF 中 Code First 的数据迁移以及创建视图 写在前面: EF 中 Co ...
- VUE常用写法
v-for: v-for ='item,key of data' v-for ='item,index in data' @click='' @click='pop.show=false' ...
- Windows下MD5校验
参考博客:https://www.cnblogs.com/liubinghong/p/9299276.html 参考博客:https://www.jianshu.com/p/1e1d56552e03 ...