首页 > 编程语言 >C#中Queue队列的基本使用示例

C#中Queue队列的基本使用示例

时间:2024-01-05 21:34:45浏览次数:27  
标签:queue Console 示例 C# 元素 Queue 队列 移除

      在C#中,Queue是一个内置的FIFO(First-In-First-Out)集合,这意味着元素在队列中的顺序与它们被添加的顺序相同,当且仅当从队列中移除元素时,元素出队的顺序才是正确的。

Queue在.NET Framework中是一个泛型集合类型,这意味着你可以存储任何类型的元素。它提供了许多方法来操作队列,包括:

  • Enqueue(T): 在队列的末尾添加一个元素。
  • Dequeue(): 移除并返回队列的第一个元素。
  • Peek(): 返回队列的第一个元素,但不移除它。
  • Count: 返回队列中元素的数量。
  • Clear(): 移除队列中的所有元素。

这些方法可以帮助你有效地处理队列中的数据。

下面是在C#中使用Queue的基本示例:

using System;
using System.Collections.Generic;

class Program
{
static void Main()
{
// 创建一个队列
        Queue<int> queue = new Queue<int>();

// 向队列添加元素
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
queue.Enqueue(4);
queue.Enqueue(5);

// 显示队列中的元素
        Console.WriteLine("初始队列:");
        foreach (var item in queue)
        {
            Console.Write(item + " ");
        }
        Console.WriteLine();

// 从队列中取出元素并显示
        Console.WriteLine("取出元素:");
int dequeueItem = queue.Dequeue();
        Console.Write(dequeueItem + " ");
        Console.WriteLine();

// 显示取出元素后的队列
        Console.WriteLine("取出元素后的队列:");
        foreach (var item in queue)
        {
            Console.Write(item + " ");
        }
    }
}

这个示例程序创建了一个Queue对象,然后向这个队列添加了五个整数。接着,它从队列中取出一个元素并显示它,最后显示取出元素后的队列。

优点和缺点

优点

  • 先进先出(FIFO)原则:Queue保证了元素的先进先出原则,即先添加到队列的元素会先被移除。
  • 线程安全:Queue是一个线程安全的数据结构,可以在多线程环境中安全地使用。
  • 高效的添加和移除操作:Queue的Enqueue和Dequeue操作都是常数时间复杂度O(1),这意味着无论队列的大小如何,这些操作的速度都是相对稳定的。

缺点

  • 仅支持顺序访问:Queue不支持随机访问,也就是说不能直接获取队列中的任意元素,只能从头开始遍历或者移除元素。
  • 不支持直接搜索:与数组和列表不同,Queue没有提供直接搜索元素的方法,只能通过遍历来查找元素。
  • 容量限制:Queue的大小受到内存限制,当队列达到其容量时,将无法添加更多的元素。虽然可以通过Queue的构造函数来指定初始容量,但实际的容量仍然受到系统内存的限制。
  • 不适用于需要快速直接访问的场景:由于Queue仅支持顺序访问,因此在需要快速直接访问某些元素的情况下,使用Queue可能不是最佳选择。例如,如果你需要在大量数据中快速查找特定元素,使用数组或列表可能更合适。

技术的发展日新月异,随着时间推移,无法保证本博客所有内容的正确性。如有误导,请大家见谅,欢迎评论区指正!

开源库地址,欢迎Star点亮:

GitHub:https://github.com/ITMingliang

Gitee:   https://gitee.com/mingliang_it

GitLab: https://gitlab.com/ITMingliang


建群声明: 本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,为大家答疑解惑。热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得!进群方式:扫码关注公众号,后台回复【进群】。

C#中Queue队列的基本使用示例_线程安全

标签:queue,Console,示例,C#,元素,Queue,队列,移除
From: https://blog.51cto.com/u_13096216/9118241

相关文章

  • SpringBoot框架中的DAO层、Entity层、Service层、Controller层
    非原创,看了许多篇博客的总结一般的项目模块中都有DAO、Entity、Service、Controller层。 Entity层是实体层,也就是所谓的model,也称为pojo层,是数据库在项目中的类,该文件包含实体类的属性和对应属性的set、get方法; DAO层=mapper层,现在用Mybatis逆向工程生成的mapper层,其实就是......
  • 迈入AI智能时代!ChatGPT国内版免费AI助手工具 peropure·AI正式上线,打造场景化智慧服务
     当OpenAI发布ChatGPT的时候,没有人会意识到,新一代人工智能浪潮将给人类社会带来一场眩晕式变革。其中以ChatGPT为代表的AIGC技术加速成为AI领域的热门发展方向,推动着AI时代的前行发展。面对技术浪潮,清越科技(PeroPure)立足多样化生活场景、精准把握用户实际需求,持续精确Fine-......
  • 使用Apache Commons Chain实现命令模式
    第1章:引言大家好,我是小黑。今天咱们来聊聊一个挺有意思的话题:如何用ApacheCommonsChain实现命令模式。首先,得先搞明白什么是命令模式,对吧?命令模式,它其实是一种设计模式,主要用来把一个请求或者操作封装成一个对象。这样做的好处是什么呢?主要是让你的软件设计更加灵活,更容易扩展......
  • P4021 [CTSC2012] 最短路
    [CTSC2012]最短路LuoguP4021题目描述给定一个节点\(1\)和节点\(n\)连通的正权无向图\(G\),请你删除不超过\(k\)条边,使得节点\(1\)和节点\(n\)仍然连通的同时,且这两点之间的最短路尽可能长。提交答案题。Solution模拟赛考到这道,改完这道题我爆了。提交答案题一......
  • @Repository、@Component、@Service、@Controller之间的区别与联系
     @Repository、@Component、@Service、@Controller这些注解使我们开发过程中比较常用的一些注解,今天我们就一起了解一下他们之间的区别与联系。原文官网引用:在Spring2.0之前的版本中,@Repository注解可以标记在任何的类上,用来表明该类是用来执行与数据库相关的操作(即dao对象......
  • css: rainbow Border with gradient and radius
     <!doctypehtml><html><head><metacharset="utf-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width,initial-sca......
  • SpringBoot的Controller,Service,Repository层的使用
    找回熟悉的Controller,ServiceController哪儿去了?对于很多习惯了Spring开发的同学来讲,Controller,Service,DAO这些套路突然间都没了会有不适感。其实呢,这些东西还在,只不过对于较简单的情景下,这些都变成了系统背后帮你做的事情。这一小节我们就先来看看如何将Controller再召唤回......
  • 联合union——《初学C语言第49天》
    //////————联合:union////1.联合的定义////联合也是一种特殊的自定义类型//#include<stdio.h>//unionUn//Un为联合标签//{// inta;// charc;//};//structSt//{// inta;// intb;//};//intmain()//{// unionUnu;// printf("%d\n",sizeof(u));//4// printf("%p\n",&am......
  • go SSH远程终端及WebSocket
      目前chisel基于tcphttpwebsocket的ssh代理!!所以这个东西不就是可以直接远程登录了吗?就行jumpserver一样和chisel一样使用ssh goget"github.com/gorilla/websocket"goget"golang.org/x/crypto/ssh"//等库基于Web的Terminal终端控制台完成这样一个WebTermi......
  • FAQ-k8s-harbor拉取镜像权限问题-imagePullSecrets
    一、配置1、dockervim/etc/docker/daemon.json{"insecure-registries":["192.168.10.122"]}systemctldaemon-reloadsystemctlrestartdocker二、方式一1、登录dockerlogin192.168.10.122-uadmin-pHarbor123452、查看config.json文件cat~/.docker/co......