C# Stack栈 / Queue队列+所有集合 终极一页汇总(全覆盖、零遗漏)

一、Stack 栈集合(先入后出)

1. 核心特点(必背)

先入后出 / 后进先出(LIFO)

  • 最先存入的元素在栈底

  • 最后存入的元素在栈顶

  • 入栈:添加元素 Push()

  • 出栈:删除元素 Pop()

2. 两种定义方式

复制代码
// 1.泛型栈(推荐、类型安全、无装箱拆箱、项目主流)
Stack<int> stack = new Stack<int>();

// 2.非泛型栈(过时、object类型、不安全、有装箱拆箱、仅考试考察)
Stack stack1  = new Stack();

3. 核心API精讲(结合你的代码)

复制代码
stack1.Push("张三"); // 栈底
stack1.Push("李四");
stack1.Push("王五"); // 栈顶

// Pop():删除【栈顶】元素 + 返回该元素
Console.WriteLine(stack1.Pop()); // 输出:王五

// Peek():只获取【栈顶】元素,不删除
Console.WriteLine(stack1.Peek()); // 输出:李四

4. 栈的遍历(超级易错)

没有下标,不能直接索引遍历

必须先转数组:ToArray()

复制代码
// for遍历:必须转数组
for (int i = 0; i < stack1.Count; i++)
{
    Console.WriteLine(stack1.ToArray()[i]);
}

// foreach 直接遍历(顺序:栈顶→栈底)
foreach(var i in stack1)
{
    Console.WriteLine(i+"-----");
}

5. 其他常用方法

  • Clear():清空所有元素

  • Contains():判断是否包含指定元素,返回bool

  • Count:获取元素个数


二、Queue 队列集合(先入先出)

1. 核心特点(必背)

先入先出 / 先进先出(FIFO),和排队一模一样

  • 最先入队的元素最先出队

  • 入队:Enqueue()

  • 出队:Dequeue()

2. 完整代码精讲

复制代码
Queue<string> queue = new Queue<string>();
queue.Enqueue("hello1"); // 队头
queue.Enqueue("hello2");
queue.Enqueue("hello3"); // 队尾

// Dequeue():删除【队头】元素 + 返回
Console.WriteLine(queue.Dequeue()); // hello1

// Peek():只获取【队头】,不删除
Console.WriteLine(queue.Peek()); // hello2

// 遍历顺序:队头 → 队尾
foreach (var item in queue)
{
    Console.WriteLine(item);
}

三、Stack 与 Queue 终极对比(简答题满分)

集合 规则 添加方法 删除方法 取值不删除
Stack 栈 先入后出(LIFO) Push 入栈 Pop 出栈(删顶) Peek 取栈顶
Queue 队列 先入先出(FIFO) Enqueue 入队 Dequeue 出队(删头) Peek 取队头

四、高频易错坑点(必考)

  • 栈、队列 都没有索引,不能直接 i 取值

  • 栈、队列遍历必须 ToArray() 后才能 for 循环

  • Pop / Dequeue:删除+返回元素

  • Peek:只返回、不删除

  • 栈遍历顺序:栈顶 → 栈底(倒序)

  • 队列遍历顺序:队头 → 队尾(正序)


五、极简背诵口诀

  • 栈是后进先出,Push压栈Pop弹顶

  • 队列先进先出,Enqueue入队Dequeue出首

  • Peek查看不拿走,Pop Dequeue取出就删除

  • 无索引不能下标,转数组才可for遍历

------------------所有集合------------------------

一、八大容器 核心分类(先分清大类)

1. 顺序线性集合(单列数据)

数组、ArrayList、List<T>

2. 键值对集合(映射关系数据)

Hashtable、Dictionary、SortedList

3. 特殊规则集合(受限进出)

Stack栈、Queue队列


二、终极最全总表(直接默写满分)

集合类型 是否泛型 长度 排序 索引访问 核心特点 装箱拆箱 使用状态
Array 数组 固定 无序/可手动排 支持下标 性能最高、长度不可变 常用
ArrayList 动态 无序 支持下标 任意类型混搭、类型不安全 淘汰
List<T> 动态 无序/可手动排 支持下标 有序列表、增删灵活、项目首选 主流
Hashtable 动态 无序 不支持 键值对、object存储、查找快 淘汰
Dictionary 动态 无序 不支持 泛型安全、高性能键值对、首选 主流
SortedList 动态 自动Key升序 支持下标 唯一有序键值对、双访问方式 小众
Stack 栈 可泛型 动态 无序 无索引 先入后出(LIFO) 泛型无 常用
Queue 队列 可泛型 动态 无序 无索引 先入先出(FIFO) 泛型无 常用

三、Count / Length 终极区分(必考坑)

  • Length :只属于数组

  • Count:所有集合(List、字典、哈希表、SortedList、栈、队列)


四、泛型 / 非泛型 终极规律

1. 非泛型(老旧、淘汰、不安全、装箱拆箱)

ArrayList、Hashtable、SortedList、Stack(非泛型)、Queue(非泛型)

2. 泛型(现代、安全、高性能、无装箱)

数组、List<T>、Dictionary<K,V>、Stack<T>、Queue<T>


五、三大类集合 选型公式(做题万能)

1. 存单列数据

  • 数据固定不变 → 数组

  • 数据频繁增删 → List<T>

2. 存对应关系数据

  • 不需要排序、追求性能 → Dictionary

  • 需要自动按键排序 → SortedList

3. 特殊规则

  • 后进先出 →Stack 栈

  • 先进先出 → Queue 队列


六、高频超级易错点(考前必看)

  • Dictionary / Hashtable:无索引,不能 for 下标遍历

  • SortedList:键必须同类型可比较,否则报错

  • List、数组 :元素可重复;字典键绝对唯一

  • Pop() / Dequeue():取出并删除

  • Peek():只查看、不删除

  • Array.Reverse:只是反转,不是排序

  • ArrayList、Hashtable 考试常考,项目绝不使用


七、所有集合 一句话极简总结

  • 数组:固定长度、性能最高、不能扩容

  • ArrayList:动态扩容、老旧不安全、被List替代

  • List:动态有序、泛型安全、列表王者

  • Hashtable:老旧键值对、不安全、被字典替代

  • Dictionary:无序键值对、高性能、项目首选

  • SortedList:自动按键排序、唯一可索引键值对集合

  • Stack:先入后出、栈顶操作

  • Queue:先入先出、队头操作

相关推荐
skywalk81631 小时前
设计和实现一门中文编程语言,有什么工具可以使用吗?是不是ANTLR 和LLVM都可以使用?Racket恐怕不适用吧
开发语言·编程
磊 子1 小时前
STL之set以及set和map区别
开发语言·c++·算法
Halo_tjn1 小时前
NIO 技术的使用
java·开发语言·nio
砍材农夫1 小时前
物联网 基于netty核心实战-安全tls
java·开发语言·前端·物联网·安全
SEO_juper1 小时前
JavaScript 渲染:AI 智能体无法读取,直接影响收录
开发语言·前端·javascript·aigc·seo·跨境电商·geo
Python+991 小时前
C++ 内存模型 & 底层原理
java·jvm·c++
jllllyuz1 小时前
通信信号调制识别系统(MATLAB实现)
开发语言·matlab
兰令水1 小时前
2026.5.30休息一天
java
公众号-老炮说Java1 小时前
Spring AI Alibaba 硬核实战:Token 原理 → RAG → 多智能体,一篇通
java·人工智能·后端·spring