一、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)的更多相关文章

  1. 队列Queue FIFO先进先出 栈Stack FILO先进后出

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. C# 队列(Queue)和 堆栈(Stack)

    C# 队列(Queue)和 堆栈(Stack) C# 队列(Queue) 队列(Queue)代表了一个先进先出的对象集合.当您需要对各项进行先进先出的访问时,则使用队列.当您在列表中添加一项,称为入队 ...

  3. C# 队列(Queue) 和堆栈(Stack)

    队列 (Queue)                                                                                          ...

  4. [数据结构]——链表(list)、队列(queue)和栈(stack)

    在前面几篇博文中曾经提到链表(list).队列(queue)和(stack),为了更加系统化,这里统一介绍着三种数据结构及相应实现. 1)链表 首先回想一下基本的数据类型,当需要存储多个相同类型的数据 ...

  5. python基本数据结构栈stack和队列queue

    1,栈,后进先出,多用于反转 Python里面实现栈,就是把list包装成一个类,再添加一些方法作为栈的基本操作. 栈的实现: class Stack(object): #初始化栈为空列表 def _ ...

  6. STL学习笔记6 -- 栈stack 、队列queue 和优先级priority_queue 三者比较

    栈stack  .队列queue  和优先级priority_queue 三者比较 默认下stack 和queue 基于deque 容器实现,priority_queue 则基于vector 容器实现 ...

  7. C# 队列Queue,ConcurrentQueue,BlockingCollection 并发控制lock,Monitor,信号量Semaphore

    什么是队列? 队列Queues,是一种遵循先进先出的原则的集合,在.netCore中微软给我们提供了很多个类,就目前本人所知的有三种,分别是标题提到的:Queue.ConcurrentQueue.Bl ...

  8. C++栈(stack)、队列(queue)、链表(list)的常用函数

    C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构.1.back() 返回一个引用,指向最后一个元素2.empty() 如果队列空则返回真3.front() 返回第一 ...

  9. STL--容器适配器(queue、priority_queue、stack)

    适配器(Adaptor)是提供接口映射的模板类.适配器基于其他类来实现新的功能,成员函数可以被添加.隐藏,也可合并以得到新的功能. STL提供了三个容器适配器:queue.priority_queue ...

随机推荐

  1. Linux下运行《UNIX环境高级编程》undefined reference to `err_quit 编译出错的处理方法

    错误信息: : undefined reference to `err_quit': undefined reference to `err_sys' 解决方法: 因为err_quit跟err_sys ...

  2. UWP笔记-消息弹窗自动淡出

    为了让用户有个更好的UI交互,可以增加自动淡出的消息弹窗,例如:网易云音乐UWP,切换播放模式时,出现的类似消息提示. 右键项目,添加用户控件 UserControlDemo.xaml: <Us ...

  3. [Cometoj#4 E]公共子序列_贪心_树状数组_动态规划

    公共子序列 题目链接:https://cometoj.com/contest/39/problem/E?problem_id=1585 数据范围:略. 题解: 首先可以考虑知道了$1$的个数和$3$的 ...

  4. JS对字符串的操作,截取

    substring()  //一个参数的时候是从那个参数到字符串结束的位置: substring(start,stop)        //substring是对字符串两个索引之间的值进行截取: 要注 ...

  5. springboot+JPA 整合redis

    1.导入redis依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifact ...

  6. Linux基础指令--文件操作

    mkdir a 创建一个名为a的文件夹 touch a.txt 创建一个名为a.txt的文件 mv b sm/ 将文件(夹)b 移动到当前目录下的sm目录下 rm -rf a 删除 a文件 -rf为参 ...

  7. Dijstra_优先队列_前向星

    Dijstra算法求最短路径 具体实现方式 设置源点,将源点从原集u{}中取出并放入新建集s{} 找出至源点最近的点q从原集取出放入新集s{} 由q点出发,更新所有由q点能到达的仍处于原集的点到源点的 ...

  8. command not found 的解决&&解释

    ln -s /opt/platform/calico/calicoctl /usr/local/sbin/calicoctl ln -s /opt/platform/nginx/sbin/nginxl ...

  9. Unsupported major.minor version 52.0错误和 jdbc odbc

    什么是JDBC? JDBC, 全称为Java DataBase Connectivity standard, 它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库.JDBC也是jav ...

  10. Install CUDA 6.0 on Ubuntu 14.04 LTS

    Ubuntu 14.04 LTS is out, loads of new features have been added. Here are some procedures I followed ...