C#容器源码分析 --- Queue<T>

Queue<T> 是 System.Collections.Generic 命名空间下的先进先出(FIFO)动态集合,其核心实现基于​​循环数组​​,通过维护头尾指针实现高效入队和出队操作。

.Net4.8 Queue<T>源码地址:queue.cs (microsoft.com)https://referencesource.microsoft.com/#System/compmod/system/collections/generic/queue.cs,aa3beab99b2e0db2

内部结构:

1.主要字段和属性:

_array :这是一个泛型数组,用于实际存储 Queue<T> 中的元素。
_head :代表队列头部元素的索引,也就是最先进入队列的元素的位置。
_tail :表示队列尾部元素的下一个位置的索引,新元素将被添加到这个位置。
_size :表示当前 Queue<T> 中实际存储的元素数量。
_version :用于记录 Queue<T> 的版本号。每当对队列进行添加、删除等修改操作时,这个版本号会增加。它主要用于在迭代队列时检测队列是否被修改,如果被修改则会抛出异常,以保证迭代的安全性。
_MinimumGrow :表示队列的最小扩容的数量。
_GrowFactor :表示每次扩容的因子,就是扩容时放大的倍数。
_DefaultCapacity :这是一个常量,代表 Queue<T> 的默认初始容量,值为 4。当创建一个 Queue<T> 对象在传入一个现有集合时,会使用这个默认值。
_emptyArray:这是一个静态只读的空数组,用于在某些情况下表示空队列。

2.构造函数:

1.无参构造函数:

2.指定初始容量的构造函数:

3.从现有集合初始化的构造函数:

动态扩容:

当数组元素已满时,队列中的数组会按比例将当前容量扩容,通过设置一个_MinimumGrow值,确保扩容幅度不低于最小增量,防止频繁扩容。

主要方法:

1.Enqueue:

解释: 往队列里增加一个元素队尾指针_trail往后移动一位。

2.Dequeue:

解释:将队列头部元素移除,头部指针_head往后移一位。

3.Peek:

解释:将头部数据返回不移出,头部指针_head不往后移动。

4.Contains:

EqualityComparer<T>的解释参考Stack<T>的源码分析:
C#容器源码分析 --- Stack<T>-CSDN博客

5.TrimExcess:

相关推荐
kylezhao201922 分钟前
第三节、C# 上位机面向对象编程详解(工控硬件封装实战版)
开发语言·前端·c#
kingwebo'sZone23 分钟前
c# 遍历 根据控件名获取控件实例
开发语言·c#
flysh053 小时前
深度解析 C# 核心:类(Class)的设计精髓与高级特性
开发语言·c#
莫生灬灬3 小时前
VueMultiBrowser - 开源多浏览器管理器
运维·开发语言·chrome·c#·自动化·vue
William_cl4 小时前
【C# ASP.NET】局部视图 @Html.Partial 全解析:复用 UI 的正确姿势(附避坑指南)
c#·html·asp.net
未来之窗软件服务4 小时前
幽冥大陆(八十八 ) 操作系统应用封装技术C#自解压 —东方仙盟练气期
java·前端·c#·软件打包·仙盟创梦ide·东方仙盟·阿雪技术观
kylezhao201914 小时前
C# 语言基础(变量、数据类型、流程控制、面向对象编程)
开发语言·计算机视觉·c#·visionpro
翩若惊鸿_14 小时前
【无标题】
开发语言·c#
搬砖的工人15 小时前
写了一个IIS监控工具,对付“假死“后自动重启站点
c#
红黑色的圣西罗19 小时前
对象池简述
unity·c#