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:先入先出、队头操作

相关推荐
nanxun88614 小时前
记一次诡异的 Docker 容器"串包"故障排查
java
唐青枫16 小时前
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
c#·.net
用户15630681035117 小时前
Day01 | Java 基础(Java SE)
java
行者全栈架构师19 小时前
Maven dependency:tree 的 8 个高级用法
java·后端
行者全栈架构师1 天前
IDEA 中 Maven 项目的 15 个红色报错快速解决方法
java·后端
令人头秃的代码0_01 天前
mac(m5)平台编译openjdk
java
Artech1 天前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
唐青枫2 天前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马2 天前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户3721574261352 天前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java