Stack数据表现方式为先进后出:只能在栈顶进行插入和删除,最后一个放入堆栈中的对象总是先被取出来 queue:先进先出 ,当在列表中添加一项时,会插入到队尾,也被称为入队;当删除一项时,会在队头进行删除,也被称为出队
Queue
和 List
都是 C# 中的集合类型,但它们有一些重要的区别,主要体现在数据结构和用途上。
Queue(队列)
-
数据结构:
Queue
是一个先进先出(FIFO)的数据结构。元素按照它们进入队列的顺序排列,而在出队列时则按照相反的顺序。 -
主要操作:
Enqueue
: 将元素添加到队列的末尾。Dequeue
: 从队列的开头移除并返回元素。Peek
: 返回队列头部的元素,但不移除它。
-
适用场景: 队列通常用于实现任务排队、消息传递等场景,其中需要按照特定的顺序处理元素。
-
命名空间:
Queue
类位于System.Collections
命名空间中。
Stack
using UnityEngine;
using System.Collections.Generic;
public class StackExample : MonoBehaviour
{
// 创建一个整数类型的栈
private Stack<int> myStack = new Stack<int>();
void Start()
{
// 将元素推入栈中
myStack.Push(1);
myStack.Push(2);
myStack.Push(3);
// 打印栈的内容
PrintStack();
// 弹出栈顶元素
int poppedItem = myStack.Pop(); //如果是Peek,Peek方法用于查看栈顶元素而不从栈中移除它
Debug.Log("Popped item: " + poppedItem);
// 打印修改后的栈
PrintStack();
}
// 打印栈的内容
void PrintStack()
{
Debug.Log("Stack contents:");
// 遍历栈中的元素
foreach (int item in myStack)
{
Debug.Log(item);
}
Debug.Log("------------");
}
}
List(列表)
-
数据结构:
List
是一个动态数组,元素在内存中是连续存储的。它允许通过索引直接访问元素,而不需要按照特定的顺序遍历集合。 -
主要操作:
Add
: 在列表末尾添加元素。Remove
: 从列表中移除指定的元素。Count
: 获取列表中元素的数量。
-
适用场景:
List
适用于需要频繁访问、插入、删除元素的情况,而不关心元素的顺序。 -
命名空间:
List
类位于System.Collections.Generic
命名空间中。
选择使用场景:
-
如果你需要按照特定的顺序处理元素,且只关心队列头部和尾部的操作,应该选择
Queue
。Queue<string> myQueue = new Queue<string>(); myQueue.Enqueue("First"); myQueue.Enqueue("Second"); string frontItem = myQueue.Dequeue();
-
如果你需要在集合中频繁执行随机访问、插入、删除等操作,并且不关心元素的顺序,应该选择
List
。List<string> myList = new List<string>(); myList.Add("First"); myList.Add("Second"); myList.Remove("First");
总的来说,Queue
和 List
分别适用于不同的使用场景,选择取决于你的具体需求。在某些情况下,你可能会在应用程序中同时使用这两种集合类型,以便在不同的上下文中获得最佳性能。