堆(heap):堆是一种经过排序的树形数据结构,每个结点都有一个值。存储引用类型
栈(stack):它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。存储值类型
有人老是搞不清楚内存堆栈与数据结构堆栈,我们来看看什么是内存堆栈,什么是数据结构堆栈
①数据结构堆栈:是一种后进先出的数据结构,它是一个概念,图4-1中可以看出,栈是一种后进先出的数据结构。
②内存堆栈:存在内存中的两个存储区(堆区,栈区)。
栈区:存放函数的参数、局部变量、返回数据等值,由编译器自动释放
堆区:存放着引用类型的对象,由CLR释放
堆栈通常是指栈。
值类型分配在 内存栈中
引用类型存储在内存堆中,若声明一个引用类型的变量,该变量只存储在内存堆上的引用类型的实例化的内存地址,也就是说该变量所代表的不是这个变量值的本身,而是该变量值的一个内存地址。 则该引用类型只存储该变量实例化中在内存堆中的内存地址。
装箱:把值类型转变成引用类型
int i=5;
object bates=i;
Debug.Log(i)
拆箱:把一个已经装箱的引用类型转变成值类型
int i=5;
object bat=i;
int j=(int)(bat);
Debug.Log(j);
在对值类型进行装箱操作时,所使用的时间比直接赋值多20倍;拆箱操作时,所使用的时间比直接赋值多4倍。
堆栈不是指堆和栈,堆是一种类型,栈是另一种类型。它们是不同的;堆栈是指栈
小猪大牛的强行解释
栈中保存引用类型变量和值类型变量,值类型变量保存的是值类型实例的值,引用类型变量保存的是引用类型实例的引用。 对象的引用 是保存的 指向堆中的 地址的指针,堆中保存的才是对象实例
堆栈:
堆栈定义
堆栈(Stack)代表了一个后进先出的对象集合。
当您需要对各项进行后进先出的访问时,则使用堆栈。当您在列表中添加一项,称为推入元素,当您从列表中移除一项时,称为弹出元素。
Count : 获取 Stack 中包含的元素个数。
Contains: 判断某个元素是否在堆栈中。
Push:压榨、入栈,向 Stack 的顶部添加一个对象。
Pop:移除堆栈中顶部的元素
Peek:返回堆栈中的顶部元素,但不删除。
队列:
队列定义
队列(Queue)代表了一个先进先出的对象集合。
当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。
Clear:移除所有的元素。
Conut:获取Queue中元素个数。
Contains:判断某个元素是否在 Queue 中。
Dequeue:移除并返回在 Queue 的开头的对象。
Enqueue:向 Queue 的末尾添加一个对象。
TrimToSize:设置容量为 Queue 中元素的实际个数。
![](https://img.haomeiwen.com/i2838167/0649967a4f938fa0.png)
网友评论