java中堆栈的区别
1 相同点:都是RAM中存放数据的地方
2 不同点:
a.栈:存取速度快,但大小生命周期固定,主要应用于基本数据类型(byte,int,long,float,double,char,boolean)
b堆:存取速度慢,但能动态分配内存,主要应用于对象(new方式建立)
3 示例:
int a=1;
int b=1;
那么在栈中只有一个1,a和b同时指向它,因此节省内存空间。
同理: 如果
String x = "one";
String y= "one";
则 x == y 返回 true,
如果 String x=new String("one");
String y= new String("one");
则 x==y 返回false,因为前一个存在栈里面,引用同一个“one”,而后者存放在堆里,分别建立对象。
4 与C++比较,java自动垃圾回收机制,因此堆栈都由系统分配,而C++中堆有程序员分配,而栈由系统分配。
队列只能在队头做删除操作,在队尾做插入操作.而栈只能在栈顶做插入和删除操作
栈就是一个桶,后放进去的先拿出来,它下面本来有的东西要等它出来之后才能出来,就好像你看到了一个丑人不可能今天的中饭还没吐出来就先把早饭吐出来了。
堆是另外一回事,一种高级数据结构
堆,就是一陀一陀的东西。头重脚轻不算堆,要上面小下面大才算一个堆。堆是一棵二叉树,满足下面的始终比上面的大。它和二叉查找树比较起来既有好的又有不好的:好的就是要想知道数据里的最小值时根本就不用找了,直接就是最顶上的那个了;不好的就是堆除了这个以外基本上不能做别的事了。除了最顶上的那个以外,你几乎没办法控制其余的部分。
楼主想看详细的可看看链接,自己也理解不太明白
http://topic.csdn.net/u/20081215/12/D52DF473-1325-4984-80FD-3040911A7AF6.html |