根据链接点击打开链接得到的总结:
由java基本类型byte,int,short,long float,double,boolean,char 这八种定义的变量,在java为了追求速度是直接在栈中为期分配内存空间的,不是类的引用.在栈中有个"数据共享"的特性,比如,定义一个int a=3,栈会定义一个变量为a的引用,如果栈中一开始没有3,则栈会开辟一个存放字面值为3的地址.当再定义一个int b=3,栈会创建变量为b的引用,但是栈中已经有了一个字面值为3的地址,所以会出现a和b同时指向3的情况.
java把内存分为两部分,一部分栈内存,一部分是堆内存,在函数中定义的一些基本类型的变量和对象都是在栈内存中分配的,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java 会自动释放掉为该变量分配的内存空间,该内存空间可以立即被另作它用。
而堆内存是用来存储new创建的对象和数组,其内存分配是由java虚拟机的自动垃圾回收器管理,在堆中产生了一个数组或对象之后,可以在栈中定义一个特殊的变量,让这个变量的值是数组或对象在堆内存的首地址,栈的这个变量变成了堆中的数组或对象的引用变量.以后就可以使用栈的引用变量来访问对的数组或对象.引用变量在运行到其作用域之外便被释放,而堆中的数组和对象直到没有变量引用他的时候才会变成垃圾被回收.
栈堆是先进后出,可以使用链表或数组表示,
队列是先进先出,只能在对尾添加数据,队头删除数据,但是,可以查看队头和队尾的数据,还有双端队列,在两端都可以插入和删除,可以用链表和数组表示。
数组:连续的内存空间保存数据,
链表:是在非连续的内存单元中保存数据。
集合:
collection是最基本的集合接口,list和set继承了collectin.map没有
list是有序的collection ,list能够精确的控制每个元素的插入位置
实现list接口的常见类有arraylist,linkedlist,vector,stack,