BoundedQueue.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace SKMC.Api.Common.Types
  7. {
  8. /// <summary>
  9. /// 边界队列
  10. /// 添加新元素时检查是否达到上限, 如果达到则先移除最早的一个元素
  11. /// </summary>
  12. /// <typeparam name="T"></typeparam>
  13. public class BoundedQueue<T>
  14. {
  15. private readonly Queue<T> queue;
  16. private readonly int maxSize;
  17. public BoundedQueue(int size)
  18. {
  19. maxSize = size;
  20. queue = new Queue<T>();
  21. }
  22. public void Enqueue(T item)
  23. {
  24. if (queue.Count >= maxSize)
  25. {
  26. queue.Dequeue();
  27. }
  28. queue.Enqueue(item);
  29. }
  30. public T Dequeue()
  31. {
  32. return queue.Dequeue();
  33. }
  34. public T Peek()
  35. {
  36. return queue.Peek();
  37. }
  38. public int Count
  39. {
  40. get { return queue.Count; }
  41. }
  42. public T[] ToArray() => queue.ToArray();
  43. }
  44. }