JAVA堆,栈的区别,用AarrayList、LinkedList自定义栈
大家都知道java模拟机在运行时要开辟空间所以它有特定的五个内存划分:
1.寄存器;
2.本地方法区;
3.方法区;
4.栈内存;
5.堆内存;
但是我们今天来注重讲一下栈和堆。
栈区(Stack):
1.栈的特点在于它是先进后出的线性表FILO(Last in first out),它的操作数据顺序是从上至下的。
就比如:一包抽巾纸,它放进包装袋时是最底下那一张最先进,但是在我们使用时最先拿出的是最上层的纸巾。
2.栈在被调用时存放在一级缓存中,调用完毕后就释放。
3.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
4.每个栈中的数据都是私有的,其他栈不能访问
如何自定义栈:
一:用的是arraylist集合中去模拟栈的数据结构:
package com.j2ee;
/**
* 自定义栈
* @author Administrator
*
*/
import java.util.ArrayList;
public class Stack { ArrayList<Object> list = new ArrayList<Object>(); // 使用集合存储数据 // 栈是否为null
public boolean isEmpty() {
return list.isEmpty();
} // 栈长度
public int size() {
return list.size();
} // 取栈顶元素
public Object stackTop() {
if (list.size() == 0) {
return null;
}
return list.get(list.size() - 1);
}
// 出栈
public Object pop() {
if (list.size() == 0) {
return "栈为null,无法删除";
}
Object obj = list.get(list.size() - 1);
list.remove(list.size() - 1);
return obj;
} // 压栈
public void push(Object obj) {
list.add(obj);
} // toString
public String toString() {
return "Stack:" + list.toString();
}
}、
// 压栈
public void push(Object obj) {
list.add(obj);
} // toString
public String toString() {
return "Stack:" + list.toString();
}
}
//测试类代码:
package com.j2ee;
/**
* 测试
* @author Administrator
*
*/
public class Temp {
public static void main(String[] args) {
Stack stack=new Stack();
System.out.println("是否为空:" + stack.isEmpty());
System.out.println("长度:" + stack.size());
System.out.println("顶元素:" + stack.stackTop());
System.out.println("出栈:" + stack.pop());
System.out.println("==============我是分割线================");
stack.push("本是青灯不归客");
System.out.println("是否为空:" + stack.isEmpty());
System.out.println("长度:" + stack.size());
System.out.println("顶元素" + stack.stackTop());
System.out.println("出栈" + stack.pop());
}
}
二:用LinkedList集合去模拟栈的数据结构
//用LinkedList集合去模拟栈的数据结构
LinkedList arr=new LinkedList();
public void push(Object obj) {
arr.addFirst(obj);
}
public Object prop() {
Object object= arr.getFirst();
arr.removeFirst();
return object;
}
//测试代码
//栈
MyStarck myStarck=new MyStarck();
myStarck.push();
myStarck.push();
myStarck.push();
myStarck.push();
myStarck.push();
myStarck.push();
for (int i = ; i <myStarck.arr.size(); i++) {
System.out.println(myStarck.prop()); }
堆区(heap):
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。
2.堆的特点在于它是先进先出的缓存FIFO(First In First Out)队列,模拟器只有一个堆区(heap)被所有线程共享,堆中只存放对象本身,存放在二级缓存中,生命周期由虚拟机的垃圾回收机制定
谢谢观看!
JAVA堆,栈的区别,用AarrayList、LinkedList自定义栈的更多相关文章
- C语言中堆和栈的区别
原文:http://blog.csdn.net/tigerjibo/article/details/7423728 C语言中堆和栈的区别 一.前言: C语言程序经过编译连接后形成编译.连接后形成的二进 ...
- LinkdList和ArrayList异同、实现自定义栈
//.LinkdList和ArrayList异同 //ArrayList以连续的空间进行存储数据 //LinkedList以链表的结构存储数据 //栈 先进后出 最上面是栈顶元素 arrayLiat自 ...
- Java中堆和栈的区别(转)
栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...
- Java中的堆和栈的区别
当一个人开始学习Java或者其他编程语言的时候,会接触到堆和栈,由于一开始没有明确清晰的说明解释,很多人会产生很多疑问,什么是堆,什么是栈,堆和栈有什么区别?更糟糕的是,Java中存在栈这样一个后进先 ...
- Java堆和栈的区别和介绍,JVM的堆和栈
一.Java的堆内存和栈内存 Java把内存划分成两种:一种是堆内存,一种是栈内存. 堆:主要用于存储实例化的对象,数组.由JVM动态分配内存空间.一个JVM只有一个堆内存,线程是可以共享数据的. ...
- 【转】Java运行时数据区简介及堆与栈的区别
理解JVM运行时的数据区是Java编程中的进阶部分.我们在开发中都遇到过一个很头疼的问题就是OutOfMemoryError(内存溢出错误),但是如果我们了解JVM的内部实现和其运行时的数据区的工作机 ...
- java堆和栈的区别
java 的内存分为两类,一类是栈内存,一类是堆内存.栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这 ...
- java堆、栈、堆栈的区别
1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于CP ...
- java 堆与栈的区别
1. 堆与栈的区别? 1-1. 数据存放位置: 数据都存放于RAM (Random Access Memory). 1-2. 存放数据的类型:stack栈中保存方法中的基本数据类型(int, do ...
随机推荐
- oracle导入提示“IMP-00010:不是有效的导出文件,头部验证失败”的解决方案
这是由于导出的dmp文件与导入的数据库的版本不同造成的用Notepad++查看了dmp文件,在头部具修改成你将导入目标数据库的版本号以下对应的版本号: 11g R2:V11.02.00 11g R1: ...
- 更换python版本后出现 No module named "apt_pkg"
本文链接:https://blog.csdn.net/jaket5219999/article/details/78464310 $ sudo apt-get remove --purge pytho ...
- windows mysql绿色版配置Mysql5.7.X
MySQL绿色版安装,很简单按照下面的方式很快就可以实现了. 1.下载地址 https://dev.mysql.com/downloads/mysql/ 百度网盘链接:https://pan.baid ...
- Variance Inflation Factor (VIF) 方差膨胀因子解释_附python脚本
python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...
- 【转载】 卷积神经网络(Convolutional Neural Network,CNN)
作者:wuliytTaotao 出处:https://www.cnblogs.com/wuliytTaotao/ 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,欢迎 ...
- Linux 在 TOP 命令中切换内存的显示单位
顶部的内存信息可以在top运行时按E切换,每次切换转换率为1000,只是没有单位,切换的单位为 k,m,g,t,p: 1. 2. 3., 4. 底下的进程信息按e切换,每次切换转换率为1000,切换的 ...
- IDEA使用tomcat插件
在实际项目开发中,特别是分布式项目,往往有N多个子项目需要同时启动测试. 这一切靠本地安装的tomcat是远远不够的,而且繁琐. 这里就需要用到tomca插件. 在pom.xml中引入: <bu ...
- 基于Source Insight_Scan的C/C++静态代码检查工具安装说明
基于Source Insight_Scan的C/C++静态代码检查工具安装说明 本文链接:https://blog.csdn.net/M19930517/article/details/79977 ...
- SQL查询优化 LEFT JOIN和INNER JOIN
作者:VerySky 推荐:陈敬(Cathy) SQL查询优化 LEFT JOIN和INNER JOIN 1,连接了八个数据库表,而且全部使用LEFT JOIN,如下所示: Resource_Reso ...
- 深入理解ElasticSearch(PDF版 内含目录)
深入理解ElasticSearch 介绍: 本书涵盖了Elasticsearch的许多中高级功能,并介绍了缓存.ApacheLucene库以及监控等模块的内部运作机制.其中,还涉及一些实用案例,比如配 ...