一、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) |
出棧
|
