前言:

   “后进先出”---是栈(Stack)这种数据结构最基本的特点。很多程序设计语言都具有封装好的Stack工具,本文就带领大家一起将栈温习一下并附上一个模拟栈的程序。

   Java内存分配中,每通过new操作实例化一个对象时,其实对象是不规律地存放的。只不过JVM在加载完一个累并实例化一个对象之后又将堆中对应对象的内存地址通过引用变量规律地存放在栈中的。可通过下面的草图简单理解一下:


基于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--

Java栈的实例模拟的更多相关文章

  1. Java栈的实例-数组和链表两种方法(转)

    一.栈 栈的定义 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表. (1)通常称插入.删除的这一端为栈顶 (Top),另一端称为栈底 (Bottom). (2)当表中没有元素时称为空栈. ...

  2. JAVA上百实例源码以及开源项目

    简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级.中级.高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情.执着,对IT的憧憬. ...

  3. 从几个sample来学习JAVA堆、方法区、JAVA栈和本地方法栈

    最近在看<深入理解Java虚拟机>,书中给了几个例子,比较好的说明了几种OOM(OutOfMemory)产生的过程,大部分的程序员在写程序时不会太关注Java运行时数据区域的结构: 感觉有 ...

  4. java虚拟机 jvm java堆 方法区 java栈

    java堆是java应用程序最密切的内存空间.几乎所有的对象都存在堆中.java堆完全自动化管理,通过垃圾回收机制,垃圾对象会自动清理,不需要显式释放. 根据java垃圾回收机制的不同,java堆可能 ...

  5. memcached—Java操作Memcached实例

    前面博客介绍了如何在Windows操作系统中安装Memcached,总结一下如何使用Java操作Memcached实例: 代码一: package com.ghj.packageoftool; imp ...

  6. JAVA上百实例源码网站

    JAVA源码包1JAVA源码包2JAVA源码包3JAVA源码包4 JAVA开源包1 JAVA开源包2 JAVA开源包3 JAVA开源包4 JAVA开源包5 JAVA开源包6 JAVA开源包7 JAVA ...

  7. Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序

    先看一道Java面试题: public class Baset { private String baseName = "base"; // 构造方法 public Baset() ...

  8. 主题:Java WebService 简单实例

    链接地址:主题:Java WebService 简单实例    http://www.iteye.com/topic/1135747 前言:朋友们开始以下教程前,请先看第五大点的注意事项,以避免不必要 ...

  9. java栈内存堆内存和GC相关

    java栈内存堆内存 Java把内存分成两种,一种叫做栈内存,一种叫做堆内存,有着不同的作用.栈内存用来存储局部变量和方法调用.栈内存归属于单个线程,每个线程都会有一个栈内存,其存储的变量只能在其所属 ...

随机推荐

  1. android listView嵌套gridview的使用心得

    在开发的过程中可能需要用到listview嵌套gridview的场景,但是在Android中, 不能在一个拥有Scrollbar的组件中嵌入另一个拥有Scrollbar的组件,因为这不科学,会混淆滑动 ...

  2. 运用.net core配合VS 2015制作nuget包

    from:http://www.cnblogs.com/zeusro/p/5171084.html 运用.net core配合VS 2015制作nuget包 以往做nuget包我们一般要么用命令行,要 ...

  3. ACA烤箱菜单各项温度

    说明书找不到了, 网上找到的各项温度说明, 记一个备用 casserole 218度 cake 171度 backery 177度 frozen food 238度 patato 232度 roast ...

  4. Linux commands frequently used

    touch <filename>.sh gedit <filename>.sh bash <filename>.sh & ps auxw|grep < ...

  5. 微软职位内部推荐-SDEII_ ECO

    微软近期Open的职位: SDE II SDE II Organization Summary: Engineering, Customer interactions & Online (EC ...

  6. Xcode里-ObjC, -all_load, -force_load

    最近在做一个项目的时候,需要使用到一个第三方库,这个库的使用向导里面特别说明,在添加完该库后,需要在Xcode的Build Settings下Other Linker Flags里面加入-ObjC标志 ...

  7. mediaplayer与surfaceView,无法播放问题

    mediaplayer需要在surfaceView创建之后才能创建,不然会导致错误. surfaceholder = msurface.getHolder(); surfaceholder.setKe ...

  8. Alpha版本项目展示要求

    Alpha版本展示的时间暂定为11月17日课上.如有变动,另行通知. 在Alpha阶段项目评审会上, 每个团队有12分钟展示时间,10分钟问答和机动时间,我们的展示也不需要PPT,大家把要展现的东西写 ...

  9. c++返回值 注意事项

    1.不要返回指向局部变量或临时对象的引用.函数执行完毕后,局部变量和临时对象会消失,引用将指向不存在的数据 2.返回指向const对象的引用 使用const引用的常见原因是旨在提高效率,但对于何时采用 ...

  10. SQLServer(MSSQL)、MySQL、SQLite、Access相互迁移转换工具 DB2DB v1.2

    最近公司有一个项目,需要把原来的系统从 MSSQL 升迁到阿里云RDS(MySQL)上面.为便于测试,所以需要把原来系统的所有数据表以及测试数据转换到 MySQL 上面.在百度上找了很多方法,有通过微 ...