asp 精品网站制作,wordpress微信服务号,电商运营八大流程,招商局网站建设方案队列实现先进先出#xff0c;有装箱拆箱行为#xff0c;可存放任意类型#xff0c;但无法获取指定位置元素#xff0c;只能取出最先存储的元素。 一、基本队列操作 1、向队列添加元素#xff08;Enqueue#xff09;
Queue queue new Queue();
queue.Enqueue(1);
queue.…队列实现先进先出有装箱拆箱行为可存放任意类型但无法获取指定位置元素只能取出最先存储的元素。 一、基本队列操作 1、向队列添加元素Enqueue
Queue queue new Queue();
queue.Enqueue(1);
queue.Enqueue(道可道非常道。);
queue.Enqueue(1.21);
queue.Enqueue(白马非马。);queue.Enqueue(-5.68);
queue.Enqueue(事虽难做则必成。);2、获取队列长度Count
Console.WriteLine(队列长度 queue.Count);3、队列遍历
if (queue ! null queue.Count 0){foreach (var item in queue){Console.WriteLine(item);}
}4、读取取出(Peek)
Console.WriteLine(队列读取取出);
var value queue.Peek();
Console.WriteLine(value);5、删除取出(Dequeue)
Console.WriteLine(队列删除取出);
var value1 queue.Dequeue();
Console.WriteLine(value1);6、判断元素是否存在(Contains)
Console.WriteLine(判断队列中元素是否存在);
if (queue.Contains(1.21)){Console.WriteLine(队列中存在1.21);}7、清空队列Clear
Console.WriteLine(清空队列);
queue.Clear();二、泛型类队列 1、示例
Queuestring queue new Queuestring();queue.Enqueue(远上寒山石径斜);queue.Enqueue(白云深处有人家);queue.Enqueue(停车坐爱枫林晚);queue.Enqueue(霜叶红于二月花);int count queue.Count;Console.WriteLine(队列元素数量count);bool b queue.Contains(老六);string res b ? 队列中包括老六 : 队列中不包括老六;Console.WriteLine(res);Console.WriteLine(Peek测试);string p queue.Peek();Console.WriteLine(p);Console.WriteLine(Dequeue测试);string d1 queue.Dequeue();Console.WriteLine(d1);d1 queue.Dequeue();Console.WriteLine(d1);Console.WriteLine(Clear测试);queue.Clear();Console.WriteLine(queue.Count);2、运行结果 队列元素数量4 队列中不包括老六 Peek测试 远上寒山石径斜 Dequeue测试 远上寒山石径斜 白云深处有人家 Clear测试 0 三、队列多线程操作 1、示例
static Queueint queueT new Queueint();static readonly object objLock new object();public const int THREAD_SUM 5;public static void QueueTest(){queueT.Clear();for(int i 0; i 30; i){queueT.Enqueue(i);}var factorynew TaskFactory();var tasksnew Task[THREAD_SUM];for(int i0;i THREAD_SUM; i){Task task tasks[i];task factory.StartNew(() {Timer timer new Timer((o) {if (IsAvailable){int q Read();Console.WriteLine($线程{task.Id}读取值{q});}}, null, 500, 1000);});}}public static int Read(){int res 0;lock(objLock){if(IsAvailable){resqueueT.Dequeue();}return res;}}public static bool IsAvailable{get { return queueT.Count 0; }}2、运行结果
线程1读取值0
线程3读取值1
线程5读取值2
线程4读取值3
线程2读取值4
线程3读取值5
线程1读取值6
线程4读取值7
线程5读取值8
线程2读取值9
线程3读取值10
线程1读取值11
线程5读取值12
线程4读取值13
线程2读取值14
线程3读取值15
线程1读取值16
线程5读取值17
线程2读取值19
线程4读取值18
线程3读取值23
线程5读取值21
线程2读取值22
线程1读取值24
线程4读取值20
线程5读取值25
线程3读取值28
线程1读取值29
线程4读取值26
线程2读取值27注意线程号和数据的对应关系并不确定但所有队列元素全部遍历到。