堆 、 栈、 堆栈 、队列、装箱、拆箱

堆(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:返回堆栈中的顶部元素,但不删除。

Unity3d使用堆栈

队列:

队列定义
队列(Queue)代表了一个先进先出的对象集合。
当您需要对各项进行先进先出的访问时,则使用队列。当您在列表中添加一项,称为入队,当您从列表中移除一项时,称为出队。

Clear:移除所有的元素。
Conut:获取Queue中元素个数。
Contains:判断某个元素是否在 Queue 中。
Dequeue:移除并返回在 Queue 的开头的对象。
Enqueue:向 Queue 的末尾添加一个对象。
TrimToSize:设置容量为 Queue 中元素的实际个数。

Unity3d使用队列

队列和堆栈.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,465评论 11 349
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 5,694评论 0 4
  • 多线程、特别是NSOperation 和 GCD 的内部原理。运行时机制的原理和运用场景。SDWebImage的原...
    LZM轮回阅读 6,102评论 0 12
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 7,098评论 0 35
  • 话说吉爸看了我的写的流水账之后,控诉我每次都批评他,只会抱着宝宝跟在我后面。我想说我真的真的没有别的意思,只是客观...
    炭炭阅读 2,744评论 1 2