原文链接:https://blog.csdn.net/qq_38693757/article/details/130891605
一、概述
表示对象的先进先出集合。
队列和其他的数据结构一样,是一种存储容器,它遵循先进先出的原则,能够存储任意类型,但并不能获取到指定的位置,只能存入和取出,取出元素后,Queue 内部的元素自动删除,其实 队列 和 栈 使用方法大致差不多,只是取出数据的顺序不一样。
官方参考文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.collections.queue?view=net-7.0
二、基本的用法
1.添加元素
添加元素使用 Enqueue 方法
using System; using System.Collections; using System.Collections.Generic; namespace Queue_Test { internal class Program { static void Main(string[] args) { Queue queue = new Queue(); queue.Enqueue(1); queue.Enqueue("你好"); queue.Enqueue(true); queue.Enqueue(6.5); Console.ReadKey(); } } }
2.取出元素
1)Dequeue 方法
取出元素后,元素会自动从 Queue 中删除
using System; using System.Collections; using System.Collections.Generic; namespace Queue_Test { internal class Program { static void Main(string[] args) { Queue queue = new Queue(); queue.Enqueue(1); queue.Enqueue("你好"); queue.Enqueue(true); queue.Enqueue(6.5); var value = queue.Dequeue(); Console.WriteLine("value:" + value); Console.WriteLine("长度:" + queue.Count); Console.ReadKey(); } } }
运行
从执行的结果可以看到,最先存储的,最先被取出去。
2)Peek 方法
读取最先添加的一个元素,读取后,元素不会从 Queue 中删除,但是只能读取一个元素
using System; using System.Collections; using System.Collections.Generic; namespace Queue_Test { internal class Program { static void Main(string[] args) { Queue queue = new Queue(); queue.Enqueue(1); queue.Enqueue("你好"); queue.Enqueue(true); queue.Enqueue(6.5); var value = queue.Peek(); Console.WriteLine("value:" + value); Console.WriteLine("长度:" + queue.Count); Console.ReadKey(); } } }
运行
3.判断元素是否存在
使用 Contains 来判断元素是否存在
using System; using System.Collections; using System.Collections.Generic; namespace Queue_Test { internal class Program { static void Main(string[] args) { Queue queue = new Queue(); queue.Enqueue(1); queue.Enqueue("你好"); queue.Enqueue(true); queue.Enqueue(6.5); if(queue.Contains(1)) Console.WriteLine("存在"); else Console.WriteLine("不存在"); Console.ReadKey(); } } }
运行
4.获取队列的长度
长度的获取和 List 一样,使用 Count 属性
5.遍历队列
可以使用 foreach 遍历队列,遍历并不会移除元素
using System; using System.Collections; using System.Collections.Generic; namespace Queue_Test { internal class Program { static void Main(string[] args) { Queue queue = new Queue(); queue.Enqueue(1); queue.Enqueue("你好"); queue.Enqueue(true); queue.Enqueue(6.5); foreach (var item in queue) { Console.WriteLine(item); } Console.WriteLine("长度:" + queue.Count); Console.ReadKey(); } } }
6.清空容器
使用 Clear 方法来清空队列
using System; using System.Collections; using System.Collections.Generic; namespace Queue_Test { internal class Program { static void Main(string[] args) { Queue queue = new Queue(); queue.Enqueue(1); queue.Enqueue("你好"); queue.Enqueue(true); queue.Enqueue(6.5); Console.WriteLine("长度:" + queue.Count); queue.Clear(); Console.WriteLine("长度:" + queue.Count); Console.ReadKey(); } } }
7.Queue 泛型类
queue 和 stack 一样,都有一个泛型类,作用也一样,就是用来存储固定类型的数据,在使用时,需要加上指定的类型,在使用这些数据时,就没必要对每个数据都去类型检测,使用起来也更加规范。
using System; using System.Collections; using System.Collections.Generic; namespace Queue_Test { internal class Program { static void Main(string[] args) { Queue<string> queue = new Queue<string>(); //向队列中添加元素 queue.Enqueue("老一"); queue.Enqueue("老二"); queue.Enqueue("老三"); //获取队列的数量 int count = queue.Count; //队列中是否包含指定的 value bool b = queue.Contains("老王"); //Peek方法是返回顶部的对象而不将其从堆栈中移除 string names = queue.Peek(); //获取队列中的元素 //每次调用 Dequeue 方法,获取并移除队列中队首的元素 string s1 = queue.Dequeue(); Console.WriteLine(s1); string s2 = queue.Dequeue(); Console.WriteLine(s2); string s3 = queue.Dequeue(); Console.WriteLine(s3); //清空队列 queue.Clear(); Console.ReadKey(); } } }
三、结束
queue 和 stack 的特征和使用方法大致相同,主要特点:先进先出,存在装箱拆箱,存储任意类型,无法获取指定位置元素,只能取出最先存储的元素。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。