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 ...
随机推荐
- shell窗体实现代码雨(解闷用)
命令过程 277 2019-11-07 17:14:39 wget https://sourceforge.net/projects/cmatrix/files/cmatrix/1.2a/cmatri ...
- 【ARM-Linux开发】Linux链接
链接有两种方式:硬链接和软链接. (一)软链接 软链接又叫做符号链接.基本命令为: [plain] view plain copy ln -s sourcePlace newPlace 软链接可以链接 ...
- Java学习笔记-Java概述和环境配置
基础常识 软件:一系列按照特定顺序组织的计算机数据 和指令的集合 常见的软件: 系统软件:如:DOS,windows,Linux等 应用软件:如:扫雷,迅雷,QQ等 软件的出现实现了人与计算机之间的更 ...
- std::unique_lock与std::lock_guard分析
背景 C++多线程编程中通常会对共享的数据进行写保护,以防止多线程在对共享数据成员进行读写时造成资源争抢,导致程序出现未定义或异常行为.通常的做法是在修改共享数据成员时进行加锁(mutex).在使用锁 ...
- UWP笔记-消息弹窗自动淡出
为了让用户有个更好的UI交互,可以增加自动淡出的消息弹窗,例如:网易云音乐UWP,切换播放模式时,出现的类似消息提示. 右键项目,添加用户控件 UserControlDemo.xaml: <Us ...
- Win7 Eclipse 搭建spark java1.8环境:WordCount helloworld例子
[学习笔记] Win7 Eclipse 搭建spark java1.8环境:WordCount helloworld例子在eclipse oxygen上创建一个普通的java项目,然后把spark-a ...
- (一)springMvc 底层运作流程
目录 什么是 springMvc SpringMVC的底层运作流程 什么是 springMvc springMvc 是spring 框架的一个模块,这也就意味着二者不需要通过整合层(整合包)进行整合 ...
- (二十三)Dbutils 工具介绍
目录 Dbutils简介 API 介绍 Dbutils 已实现的结果集处理器 : Dbutils简介 commons-dbutis 是Apache 组织提供的一个开源JDBC工具类库,它对JDBC进行 ...
- 关于JS原型以及原型链、instanceof的一些理解
一.JS原型 首先要区分两个概念 1.构造函数 2.实例:由构造函数通过new方式创建出来的就是实例 <script> function Foo() { } var f = new Foo ...
- PHP max_input_var设为了1000导致post数组太多时无法接受后面的参数值
PHP max_input_var设为了1000导致post数组太多时无法接受后面的参数值 下午突然接到格力电话说无法批量设置门店任务,但是在测试环境下无法重现,测试环境下好好的. 然后登陆到生产环境 ...