Java栈的实例模拟
2015-08-09 20:22
609 查看
前言:
“后进先出”---是栈(Stack)这种数据结构最基本的特点。很多程序设计语言都具有封装好的Stack工具,本文就带领大家一起将栈温习一下并附上一个模拟栈的程序。
Java内存分配中,每通过new操作实例化一个对象时,其实对象是不规律地存放的。只不过JVM在加载完一个累并实例化一个对象之后又将堆中对应对象的内存地址通过引用变量规律地存放在栈中的。可通过下面的草图简单理解一下:
![](http://images0.cnblogs.com/blog2015/771341/201508/092018415023169.png)
基于Java本身的内存机制,加上Stack是一个基础的数据结构。本文将用Java代码实现自己的一个类,其功能跟Java内部的Stack差不多,实现的原理也很近似。
测试代码:
测试结果:
“后进先出”---是栈(Stack)这种数据结构最基本的特点。很多程序设计语言都具有封装好的Stack工具,本文就带领大家一起将栈温习一下并附上一个模拟栈的程序。
Java内存分配中,每通过new操作实例化一个对象时,其实对象是不规律地存放的。只不过JVM在加载完一个累并实例化一个对象之后又将堆中对应对象的内存地址通过引用变量规律地存放在栈中的。可通过下面的草图简单理解一下:
![](http://images0.cnblogs.com/blog2015/771341/201508/092018415023169.png)
基于Java本身的内存机制,加上Stack是一个基础的数据结构。本文将用Java代码实现自己的一个类,其功能跟Java内部的Stack差不多,实现的原理也很近似。
package stack; public class MyStack { private Object[] elements; private int size; private final static int CAPACITY=10; public MyStack(){ this(CAPACITY); } public MyStack(int capacity) { elements = new Object[capacity]; } public void push(Object o){ int len=elements.length; if(size>=len){ Object[] temp=new Object[2*len]; System.arraycopy(elements, 0, temp, 0, len); elements=temp; } elements[size++]=o; } public Object pop(){ return elements[--size]; } public Object peek(){ return elements[size-1]; } public int getSize(){ return size; } public boolean empty(){ return size==0; } }
测试代码:
package stack; public class TestStack { /** * @param args */ public static void main(String[] args) { test2(); } private static void test2() { MyStack stack = new MyStack(); for(int i=1;i<=15;i++){ stack.push("str"+i); } while(!stack.empty()){ System.out.println(stack.pop()); } System.out.println("--end--"); } }
测试结果:
str15 str14 str13 str12 str11 str10 str9 str8 str7 str6 str5 str4 str3 str2 str1 --end--
相关文章推荐
- SSH三大框架整合(Hibernate,Spring,struts2)
- 华为机试——两个超长正整数的加法 java
- 智渔课堂官方免费教程四:Java基础之数据类型 常量 变量 数据类型转换
- I学霸官方免费教程四:Java基础之数据类型 常量 变量 数据类型转换
- java线层的启动与停止
- Java实现算法之--选择排序
- Java基础学习总结---------异常Exception(2)
- Java产生随机数
- 栈的链表实现(JAVA)
- java面向接口编程
- Java程序设计求出岁数
- 如何清楚描述spring
- 关于 java 实现 语音朗读
- 通过网页访问SQL数据库,提示java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
- spring的@Transactional注解详细用法
- Java字符串题目--删除给定字符串中出现次数最少的字符
- 一致性哈希算法与Java实现
- 【Java多线程】之十四:Java FutureTask Example Program
- 智渔课堂官方免费教程三:Java基础之注释 关键字 标识符
- I学霸官方免费教程三:Java基础之注释 关键字 标识符