源代码版本为 .NET Framework 4.6.1
本系列持续更新,敬请关注
有投入,有产出。
(注:非基础性,主要涉及Stack的实现原理)
水平有限,若有不对之处,望指正。
Stack(栈)表示对象的后进先出 (LIFO) 集合。实现了ICollection接口。
概念
定义:限定仅在表尾进行插入或删除操作的线性表,表尾对应栈顶,表头对应栈底,不含元素的栈称为空栈。
入栈:往栈顶插入一个元素。
出栈:在栈顶删除一个元素
元素的操作只能在栈顶进行,最后入栈的元素最先出栈,结构图如下:
进入主题
基本成员
private T[] _array; // 用于存储栈元素的数组
private int _size; // 栈元素的数量
private const int _defaultCapacity = 4; // 默认初始容量
static T[] _emptyArray = new T[0]; // 空数组,用于赋默认值
构造函数
Stack有三个构造函数,分别为:
(1)全部使用Stack设定的默认值,不推荐使用(原因是动态扩容需要额外的计算与开辟新的内存空间,动态扩容应该发生在超出预期容量值范围的情况下,抑制溢出);
public Stack() {
_array = _emptyArray;
_size = 0;
_version = 0;
}
(2)使用一个非负的整数设定Stack的一个初始容量,推荐使用(给定一个预期的容量值,若预期值小了,会自动扩容,也不担心溢出)
public Stack(int capacity) {
if