如果你掌握了一门语言的数据结构 ,那么你离掌握这门语言 也不远了

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# 集合类型学习的更多相关文章

  1. springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定

    springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...

  2. Swift学习笔记(5):集合类型

    目录: 数组:Array 集合:Set 字典:Dictionary Swift提供Array(有序集合数据).Set(无序无重复集合)和Dictionary(无序键值对集合)三种基本集合类型来存储明确 ...

  3. 【Python学习之四】集合类型

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 python3.6 一.字符串:字符串实际上就是字符的数组1.切片是指 ...

  4. redis 学习(6)-- 集合类型

    redis 学习(6)-- 集合类型 set 结构 无序 无重复 集合间操作 set 集合内操作 命令 含义 sadd key memebr1 [member2...] 向集合中添加一个或多个成员 s ...

  5. Python学习笔记——集合类型

    集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...

  6. 【Swift学习】Swift编程之旅---集合类型之数组(六)

    swift提供了3种主要的集合类型,array,set,dictionary.本节介绍array. 数组是存储有序的相同类型的集合,相同的值可以多次出现在不同的位置. 注意: swift的Array类 ...

  7. Guava学习笔记:Guava新增集合类型-Bimap

    BiMap提供了一种新的集合类型,它提供了key和value的双向关联的数据结构. 通常情况下,我们在使用Java的Map时,往往是通过key来查找value的,但是如果出现下面一种场景的情况,我们就 ...

  8. Guava学习笔记:Guava新增集合类型-Multimap

    在日常的开发工作中,我们有的时候需要构造像Map<K, List<V>>或者Map<K, Set<V>>这样比较复杂的集合类型的数据结构,以便做相应的业 ...

  9. Guava学习笔记:Guava新增集合类型-Multiset

    Guava引进了JDK里没有的,但是非常有用的一些新的集合类型.所有这些新集合类型都能和JDK里的集合平滑集成.Guava集合非常精准地实现了JDK定义的接口.Guava中定义的新集合有: Multi ...

随机推荐

  1. 慎用--skip-grant-tables命令

    该命令作用是跳过授权表,也就是说谁都能进入mysql看到所有数据表,输入任意字符账号密码都可以 当忘记账号密码时可以使用改命令修改密码,但是要随用随关,重启mysql,不然服务器上会有很大的风险. 介 ...

  2. 今天我解决的sql中文乱码问题

    昨天我终于把我的网站做好了,在电脑上准备就绪,经过测试一切正常,放上服务器上准备炫耀一下的时候,发现插进数据库的中文字段全都变成???了,检测了下,前台是utf-8,后台是utf-8,在插进数据库前我 ...

  3. TCP/IP详解,卷1:协议--ARP:地址解析协议

    引言 本章我们要讨论的问题是只对 T C P / I P 协议簇有意义的 I P 地址.数据链路如以太网或令牌 环网都有自己的寻址机制(常常为 48 bit 地址),这是使用数据链路的任何网络层都必须 ...

  4. jenkins部署到Tomcat下

    一.首选要下载与安装jdk,因为需要在Java环境下面运行,安装好jdk后配置java环境变量(jdk环境变量的配置网上很多) 我本人安装的是jdk1.8 二.安装好jdk后,需要下载tomcat,这 ...

  5. 《aelf经济和治理白皮书》重磅发布:为DAPP提供治理高效、价值驱动的生态环境

    2020年2月17日,aelf正式发布<aelf经济和治理白皮书>,这是aelf继项目白皮书后,在aelf网络经济模型和治理模式方面的权威论述.<aelf经济和治理白皮书>描述 ...

  6. .NTE Core Web API Example

    Source from :https://www.codeproject.com/Articles/1260600/Speed-up-ASP-NET-Core-WEB-API-application- ...

  7. webpack 打包增加版本信息

    What do we need? 笔者目的是在vue项目打包后的 dist/index.html 文件中写入本次打包git用户.最后一次git提交信息,这样做的目的是便于线上项目的管理和防止同事之间的 ...

  8. 忘记win8开机密码的清除方法

    1.进PE 2.打开计算机,进入 C:\Windows\System32 目录下 3.找到 magnify.exe 改名为 mangify1.exe .将 cmd.exe 改名为 magnify.ex ...

  9. 吴裕雄 python 机器学习——集成学习梯度提升决策树GradientBoostingRegressor回归模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets,ensemble from sklear ...

  10. python之nosetest

    nose介绍 nose下载 nose使用 -s 能够打印用例中的print信息 ➜ func_tests git:(master) ✗ nosetests -v test_app.py:TestApp ...