C#的队列(Queue,ConcurrentQueue)和堆栈(Stack,ConcurrentStack)
一、Queue
表示对象的先进先出(FIFO)集合,非线程安全
| 常用方法 | |
| Dequeue | 入队 |
| Enqueue | 出队 |
| Contains | 队列中是否存在某元素 |
| Clear | 清空队列 |
封装:
/// <summary>
/// QueuePool(先进先出)
/// </summary>
/// <typeparam name="T">表示泛型,QueuePool中元素的类型</typeparam>
public class QueuePool<T>
{
private Queue<T> myPool = null; /// <summary>
/// 按照设定的大小初始化 QueuePool
/// </summary>
/// <param name="capacity"> QueuePool 最大容量</param>
public QueuePool(int capacity)
{
myPool = new Queue<T>(capacity);
} /// <summary>
/// 向 QueuePool 中添加对象
/// </summary>
/// <param name="item">待添加对象</param>
public void Enqueue(T item)
{
if (item == null)
throw new ArgumentNullException("Items added to a QueuePool cannot be null"); lock (myPool)
{
myPool.Enqueue(item);
}
} /// <summary>
/// 向 QueuePool 中提取对象,并移除该对象
/// </summary>
/// <returns>提取出来的对象</returns>
public T Dequeue()
{
lock (myPool)
{
return myPool.Dequeue();
}
} /// <summary>
/// 向 QueuePool 中提取对象,但不移除该对象
/// </summary>
/// <returns>提取出来的对象</returns>
public T Peek()
{
lock (myPool)
{
return myPool.Peek();
}
} /// <summary>
/// 从 QueuePool 中移除所有的对象。
/// </summary>
public void Clear()
{
lock (myPool)
{
myPool.Clear();
}
} /// <summary>
/// 判断某个对象是否在 QueuePool 中
/// </summary>
public bool Contains(T item)
{
lock (myPool)
{
return myPool.Contains(item);
}
} /// <summary>
/// 获取 QueuePool 中包含的对象个数
/// </summary>
public int Count { get => myPool.Count(); }
}
二、Stack
表示对象的简单后进先出 (LIFO) 非泛型集合,非线程安全
| 常用方法 | |
| Push | 入栈 |
| Pop | 出栈 |
| Contains | 堆栈中是否存在某元素 |
| Clear | 清空堆栈 |
封装:
/// <summary>
/// StackPool(后进先出)
/// </summary>
/// <typeparam name="T">表示泛型,StackPool中元素的类型</typeparam>
public class StackPool<T>
{
private Stack<T> myPool = null; /// <summary>
/// 按照设定的大小初始化 StackPool
/// </summary>
/// <param name="capacity"> StackPool 最大容量</param>
public StackPool(int capacity)
{
myPool = new Stack<T>(capacity);
} /// <summary>
/// 向 StackPool 中添加对象
/// </summary>
/// <param name="item">待添加对象</param>
public void Push(T item)
{
if (item == null)
throw new ArgumentNullException("Items added to a StackPool cannot be null"); lock (myPool)
{
myPool.Push(item);
}
} /// <summary>
/// 向 StackPool 中提取对象,并移除该对象
/// </summary>
/// <returns>提取出来的对象</returns>
public T Pop()
{
lock (myPool)
{
return myPool.Pop();
}
} /// <summary>
/// 向 StackPool 中提取对象,但不移除该对象
/// </summary>
/// <returns>提取出来的对象</returns>
public T Peek()
{
lock (myPool)
{
return myPool.Peek();
}
} /// <summary>
/// 从 StackPool 中移除所有的对象。
/// </summary>
public void Clear()
{
lock (myPool)
{
myPool.Clear();
}
} /// <summary>
/// 判断某个对象是否在 StackPool 中
/// </summary>
public bool Contains(T item)
{
lock (myPool)
{
return myPool.Contains(item);
}
} /// <summary>
/// 获取 StackPool 中包含的对象个数
/// </summary>
public int Count { get => myPool.Count(); }
}
三、ConcurrentQueue
表示线程安全的先进先出 (FIFO) 集合
|
常用方法 |
|
|
Dequeue |
入队 |
|
TryDequeue(T) |
出队 |
四、ConCurrentStack
表示线程安全的后进先出 (LIFO) 集合
|
常用方法 |
|
|
Push |
入栈 |
|
TryPop(T) |
出栈 |
C#的队列(Queue,ConcurrentQueue)和堆栈(Stack,ConcurrentStack)的更多相关文章
- 队列Queue FIFO先进先出 栈Stack FILO先进后出
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- C# 队列(Queue)和 堆栈(Stack)
C# 队列(Queue)和 堆栈(Stack) C# 队列(Queue) 队列(Queue)代表了一个先进先出的对象集合.当您需要对各项进行先进先出的访问时,则使用队列.当您在列表中添加一项,称为入队 ...
- C# 队列(Queue) 和堆栈(Stack)
队列 (Queue) ...
- [数据结构]——链表(list)、队列(queue)和栈(stack)
在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...
- python基本数据结构栈stack和队列queue
1,栈,后进先出,多用于反转 Python里面实现栈,就是把list包装成一个类,再添加一些方法作为栈的基本操作. 栈的实现: class Stack(object): #初始化栈为空列表 def _ ...
- STL学习笔记6 -- 栈stack 、队列queue 和优先级priority_queue 三者比较
栈stack .队列queue 和优先级priority_queue 三者比较 默认下stack 和queue 基于deque 容器实现,priority_queue 则基于vector 容器实现 ...
- C# 队列Queue,ConcurrentQueue,BlockingCollection 并发控制lock,Monitor,信号量Semaphore
什么是队列? 队列Queues,是一种遵循先进先出的原则的集合,在.netCore中微软给我们提供了很多个类,就目前本人所知的有三种,分别是标题提到的:Queue.ConcurrentQueue.Bl ...
- C++栈(stack)、队列(queue)、链表(list)的常用函数
C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构.1.back() 返回一个引用,指向最后一个元素2.empty() 如果队列空则返回真3.front() 返回第一 ...
- STL--容器适配器(queue、priority_queue、stack)
适配器(Adaptor)是提供接口映射的模板类.适配器基于其他类来实现新的功能,成员函数可以被添加.隐藏,也可合并以得到新的功能. STL提供了三个容器适配器:queue.priority_queue ...
随机推荐
- ES 数据类型
官网数据类型网址 有价值的参考博客 本文 Elasticsearch 版本为 7.2 1. 核心数据类型 (1)字符串类型: text, keyword (2)数字类型:long, integer, ...
- 获取父窗口iframe的ztree对象
问题如下:我要在jqgrid中获取ztree的选中节点对象 var iframe = parent.$("#ztree的iframeId").contents(); var ztr ...
- STM32 M0之SPI
从M3到M0,可能SPI的接口函数大致类似,但是细节略有不同 仔细观察寄存器描述,虽然个别存在差异,但是真心不知道竟然有太多的“玄机” 这次的问题主要出在了数据宽度上: 1. M3/M4的数据宽度支持 ...
- MySQL添加、修改、撤销用户数据库操作权限的一些记录
查看MYSQL数据库中所有用户 SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user; ...
- celery异步任务
1.安装 pip install celery 2.创建celery_tasks文件夹,创建config配置文件和main文件 # 在config.py文件中配置中间人broker地址信息 - red ...
- 【AtCoder】CODE FESTIVAL 2016 qual A
CODE FESTIVAL 2016 qual A A - CODEFESTIVAL 2016 -- #include <bits/stdc++.h> #define fi first # ...
- Kubernetes---Pod phase
⒈Pod phase Pod的status字段是一个PodStatus对象,PodStatus中有一个 phase字段. Pod的相位(phase)是Pod 在其生命周期中的简单宏观概述.该阶段并不是 ...
- Spark的lazy特性有什么意义呢?
[学习笔记] Spark通过lazy特性有什么意义呢? Spark通过lazy特性,可以进行底层的spark应用执行的优化.在生活中,就像三思而后行.谋定而后动. 文章转载自原文:https://bl ...
- IoC(Inversion of Control 控制反转)
控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Dependency Inject ...
- c#将电脑时间同步到网络时间
最近遇到个项目,需要控制软件使用时间,由于电脑不联网可以修改时间,故需要联网使电脑同步网络时间 网上寻找了很多解决方案,代码如下: //Forproc_Win32.cs//对常用Win32 API函数 ...