首页 > Windows开发 > 详细

C# 集合类型学习

时间:2016-03-29 16:24:58      阅读:363      评论:0      收藏:0      [点我收藏+]

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

1.列表

对于list,值得一提的是 Capacity 属性,使用默认的构造函数 ,让我们用代码来说明

   var intList = new List<int>();
            Console.WriteLine(intList.Capacity);
            //输出0

            intList.Add(0);
            Console.WriteLine(intList.Capacity);
            //输出4

            intList.AddRange(new List<int>(){1,2,3,4});
            Console.WriteLine(intList.Capacity);
            //输出8

            intList.AddRange(new List<int>() { 5, 6, 7, 8 });
            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 > 0; }
       }

      
    }
比较重要的一个类 使用异步去读取队列中的元素(消息) 如果有消息就处理,如果没有,就 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(20)); } } }

 


class Program { static void Main(string[] args) { var pm = new PresonManager(); PresonProcess.Start(pm); for (int i = 0; i < 20; i++) { Console.WriteLine("Preson {0}",i); pm.AddPreson(new Preson() { Age = i.ToString(), Name = "Mo", Sex = "" }); Thread.Sleep(new Random().Next(20)); } Console.Read(); } }

 

3.堆栈

头进尾出

 

C# 集合类型学习

原文:http://www.cnblogs.com/qingtianMo/p/5333172.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!