浅析 c# Queue

1、Queue定义

System.Collections.Queue类表示对象的先进先出集合,存储在 Queue(队列) 中的对象在一端插入,从另一端移除。

2、优点

1、能对集合进行顺序处理(先进先出)。

2、能接受null值,并且允许重复的元素。

3、 Queue的构造器


构造器函数


注释


Queue ()


初始化 Queue 类的新实例,该实例为空,具有默认初始容量(32)并使用默认增长因子(2.0)。


Queue (ICollection)


初始化 Queue 类的新实例,该实例包含从指定集合复制的元素,具有与所复制的元素数相同的初始容量并使用默认增长因子。


Queue (Int32)


初始化 Queue 类的新实例,该实例为空,具有指定的初始容量并使用默认增长因子。


Queue (Int32, Single)


初始化 Queue 类的新实例,该实例为空,具有指定的初始容量并使用指定的增长因子。

4、Queue的属性


属性名


注释


Count


获取 Queue 中包含的元素数。

5. Queue的方法


方法名


注释


Void Clear()


从 Queue 中移除所有对象。


Bool Contains(object obj)


确定某元素是否在 Queue 中。


Object Clone()


创建 Queue 的浅表副本。


Void CopyTo(Array array,int index)


从指定数组索引开始将 Queue 元素复制到现有一维 Array 中。


Object Dequeue()


移除并返回位于 Queue 开始处的对象。


Void Enqueue(object obj)


将对象添加到 Queue 的结尾处。


Object Peek()


返回位于 Queue 开始处的对象但不将其移除。


Object[]ToArray()


将 Queue 元素复制到新数组。


Void TrimToSize()


将容量设置为 Queue 中元素的实际数目。

6、Queue的使用示例

class Program
{
    static void Main(string[] args)
    {
        //创建一个队列
        Queue myQ = new Queue();
        myQ.Enqueue("The");//入队
        myQ.Enqueue("quick");
        myQ.Enqueue("brown");
        myQ.Enqueue("fox");
        myQ.Enqueue(null);//添加null
        myQ.Enqueue("fox");//添加重复的元素 

        // 打印队列的数量和值
        Console.WriteLine("myQ");
        Console.WriteLine("\tCount:    {0}", myQ.Count); 

        // 打印队列中的所有值
        Console.Write("Queue values:");
        PrintValues(myQ); 

        // 打印队列中的第一个元素,并移除
        Console.WriteLine("(Dequeue)\t{0}", myQ.Dequeue()); 

        // 打印队列中的所有值
        Console.Write("Queue values:");
        PrintValues(myQ); 

        // 打印队列中的第一个元素,并移除
        Console.WriteLine("(Dequeue)\t{0}", myQ.Dequeue()); 

        // 打印队列中的所有值
        Console.Write("Queue values:");
        PrintValues(myQ); 

        // 打印队列中的第一个元素
        Console.WriteLine("(Peek)   \t{0}", myQ.Peek()); 

        // 打印队列中的所有值
        Console.Write("Queue values:");
        PrintValues(myQ); 

        Console.ReadLine(); 

    } 

    public static void PrintValues(IEnumerable myCollection)
    {
        foreach (Object obj in myCollection)
            Console.Write("    {0}", obj);
        Console.WriteLine();
    } 

7.备注

1、Queue 的容量是 Queue 可以保存的元素数。Queue 的默认初始容量为 32。向 Queue 添加元素时,将通过重新分配来根据需要自动增大容量。可通过调用 TrimToSize 来减少容量。等比因子是当需要更大容量时当前容量要乘以的数字。在构造 Queue 时确定增长因子。默认增长因子为 2.0。

2、Queue 能接受空引用作为有效值,并且允许重复的元素。

3、空引用可以作为值添加到 Queue。若要区分空值和 Queue 结尾,请检查 Count 属性或捕捉 Queue 为空时引发的 InvalidOperationException异常。

时间: 2024-12-11 23:28:36

浅析 c# Queue的相关文章

C++ Primer 学习笔记_55_STL剖析(十):容器适配器(stack、 queue 、priority_queue)源码浅析与使用示例

七种基本容器:vector.deque.list.set.multiset.map.multimap 一.容器适配器 stack queue priority_queue stack.queue.priority_queue 都不支持任一种迭代器,它们都是容器适配器类型,stack是用vector/deque/list对象创建了一个先进后出容器:queue是用deque或list对象创建了一个先进先出容器:priority_queue是用vector/deque创建了一个排序队列,内部用二叉堆实

C++ stack,queue,vector 中 易混淆的常用方法 浅析

C++ 中stack,queue,vector是常见的数据结构,它们分别封装在<stack>,<queue>,<vector>头文件中. stack,queue,vector的定义如下: stack<class T> s; queue<class T> q; vector<class T> v; stack常用方法: push()的向容器顶部里插入元素: pop()是删除容器顶部的元素: top()返回容器顶部的元素: size()返

Volley框架源码浅析(一)

尊重原创http://blog.csdn.net/yuanzeyao/article/details/25837897 从今天开始,我打算为大家呈现关于Volley框架的源码分析的文章,Volley框架是Google在2013年发布的,主要用于实现频繁而且粒度比较细小的Http请求,在此之前Android中进行Http请求通常是使用HttpUrlConnection和HttpClient进行,但是使用起来非常麻烦,而且效率比较地下,我想谷歌正式基于此种原因发布了Volley框架,其实出了Voll

【Spark Core】任务运行机制和Task源代码浅析1

引言 上一小节<TaskScheduler源代码与任务提交原理浅析2>介绍了Driver側将Stage进行划分.依据Executor闲置情况分发任务,终于通过DriverActor向executorActor发送任务消息. 我们要了解Executor的运行机制首先要了解Executor在Driver側的注冊过程.这篇文章先了解一下Application和Executor的注冊过程. 1. Task类及其相关 1.1 Task类 Spark将由Executor运行的Task分为ShuffleMa

ReactiveCocoa2 源码浅析

ReactiveCocoa2 源码浅析 标签(空格分隔): ReactiveCocoa iOS Objective-C ? 开车不需要知道离合器是怎么工作的,但如果知道离合器原理,那么车子可以开得更平稳. ReactiveCocoa 是一个重型的 FRP 框架,内容十分丰富,它使用了大量内建的 block,这使得其有强大的功能的同时,内部源码也比较复杂.本文研究的版本是2.4.4,小版本间的差别不是太大,无需担心此问题. 这里只探究其核心 RACSignal 源码及其相关部分.本文不会详细解释里

【Spark Core】任务执行机制和Task源码浅析1

引言 上一小节<TaskScheduler源码与任务提交原理浅析2>介绍了Driver侧将Stage进行划分,根据Executor闲置情况分发任务,最终通过DriverActor向executorActor发送任务消息. 我们要了解Executor的执行机制首先要了解Executor在Driver侧的注册过程,这篇文章先了解一下Application和Executor的注册过程. 1. Task类及其相关 1.1 Task类 Spark将由Executor执行的Task分为ShuffleMap

Volley框架源码浅析(二)

尊重原创 http://write.blog.csdn.net/postedit/25921795 在前面的一片文章Volley框架浅析(一)中我们知道在RequestQueue这个类中,有两个队列:本地队列和网络队列 /** The cache triage queue. */ private final PriorityBlockingQueue<Request<?>> mCacheQueue = new PriorityBlockingQueue<Request<

并发框架Disruptor浅析

1.引言 Disruptor是一个开源的Java框架,它被设计用于在生产者—消费者(producer-consumer problem,简称PCP)问题上获得尽量高的吞吐量(TPS)和尽量低的延迟.Disruptor是LMAX在线交易平台的关键组成部分,LMAX平台使用该框架对订单处理速度能达到600万TPS,除金融领域之外,其他一般的应用中都可以用到Disruptor,它可以带来显著的性能提升.其实Disruptor与其说是一个框架,不如说是一种设计思路,这个设计思路对于存在“并发.缓冲区.生

Android网络通信Volley框架源码浅析(三)

尊重原创 http://write.blog.csdn.net/postedit/26002961 通过前面浅析(一)和浅析(二)的分析,相信大家对于Volley有了初步的认识,但是如果想更深入的理解,还需要靠大家多多看源码. 这篇文章中我们主要来研究一下使用Volley框架请求大量图片的原理,在Android的应用中,通过http请求获取的数据主要有三类: 1.json 2.xml 3.Image 其中json和xml的获取其实原理很简单,使用Volley获取感觉有点大财小用了,了解Volle