Queue 概述

  1. Queue<T> 遵循先进先出的规则存储元素

  2. Queue<T> 支持泛型,可以指定存储的元素的类型

  3. Queue<T> 不是线程安全的,在多线程环境中需要谨慎使用


一、Queue 的定义

  1. 定义 Queue
Queue<int> nums = new Queue<int>();
  1. 定义 Queue 并填充一些元素
Queue<int> nums = new Queue<int>(new int[] { 1, 2, 3, 4, 5 });

二、Queue 元素的基本操作

1、Queue 元素的添加
Queue<int> nums = new Queue<int>();

nums.Enqueue(1);
nums.Enqueue(2);
nums.Enqueue(3);
2、Queue 元素的访问
Queue<int> nums = new Queue<int>();

nums.Enqueue(1);
nums.Enqueue(2);
nums.Enqueue(3);

Console.WriteLine(nums.Dequeue());
# 输出结果

1
3、Queue 元素的查看
Queue<int> nums = new Queue<int>();

nums.Enqueue(1);
nums.Enqueue(2);
nums.Enqueue(3);

Console.WriteLine(nums.Peek());
# 输出结果

1

三、Queue 元素的遍历

Queue<int> nums = new Queue<int>();

nums.Enqueue(1);
nums.Enqueue(2);
nums.Enqueue(3);

foreach (int num in nums)
{
    Console.WriteLine(num);
}
# 输出结果

1
2
3

四、Queue 的常用方法

1、Queue 元素的删除
Queue<int> nums = new Queue<int>();

nums.Enqueue(1);
nums.Enqueue(2);
nums.Enqueue(3);

Console.WriteLine("删除元素之前");
Console.WriteLine(nums.Count);

nums.Dequeue();

Console.WriteLine("删除元素之后");
Console.WriteLine(nums.Count);
# 输出结果

删除元素之前
3
删除元素之后
2
2、Queue 大小的获取
Queue<int> nums = new Queue<int>();

nums.Enqueue(1);
nums.Enqueue(2);
nums.Enqueue(3);

Console.WriteLine(nums.Count);
# 输出结果

3
3、Queue 元素的清空
Queue<int> nums = new Queue<int>();

nums.Enqueue(1);
nums.Enqueue(2);
nums.Enqueue(3);

Console.WriteLine("清空元素之前");
Console.WriteLine(nums.Count);

nums.Clear();

Console.WriteLine("清空元素之后");
Console.WriteLine(nums.Count);
# 输出结果

清空元素之前
3
清空元素之后
0

五、Queue 注意事项

  1. Dequeue 方法是对 Queue 元素的访问(删除),它会导致 Queue 的改变,它会返回并移除 Queue 中的第一个元素
Queue<int> nums = new Queue<int>();

nums.Enqueue(1);
nums.Enqueue(2);
nums.Enqueue(3);

Console.WriteLine("调用 Dequeue 方法之前");
Console.WriteLine(nums.Count);

int num = nums.Dequeue();

Console.WriteLine("调用 Dequeue 方法之前");
Console.WriteLine(nums.Count);
# 输出结果

调用 Dequeue 方法之前
3
调用 Dequeue 方法之前
2
  1. Peek 方法是对 Queue 元素的查看,它不会导致 Queue 的改变,它会返回 Queue 中的第一个元素,但不会移除该元素
Queue<int> nums = new Queue<int>();

nums.Enqueue(1);
nums.Enqueue(2);
nums.Enqueue(3);

Console.WriteLine("调用 Peek 方法之前");
Console.WriteLine(nums.Count);

int num = nums.Peek();

Console.WriteLine("调用 Peek 方法之前");
Console.WriteLine(nums.Count);
# 输出结果

调用 Peek 方法之前
3
调用 Peek 方法之前
3
  1. Queue 元素的遍历不会导致 Queue 的改变
Queue<int> nums = new Queue<int>();

nums.Enqueue(1);
nums.Enqueue(2);
nums.Enqueue(3);

Console.WriteLine("Queue 元素的遍历之前");
Console.WriteLine(nums.Count);

foreach (int num in nums) { }

Console.WriteLine("Queue 元素的遍历之后");
Console.WriteLine(nums.Count);
# 输出结果

Queue 元素的遍历之前
3
Queue 元素的遍历之后
3
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐