码迷,mamicode.com
首页 > 编程语言 > 详细

Java栈的实例模拟

时间:2015-08-09 22:18:47      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:

前言:

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

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

技术分享
基于Java本身的内存机制,加上Stack是一个基础的数据结构。本文将用Java代码实现自己的一个类,其功能跟Java内部的Stack差不多,实现的原理也很近似。

 1 package stack;
 2 
 3 public class MyStack {
 4     
 5     private Object[] elements;
 6     private int size;
 7     private final static int CAPACITY=10;
 8     
 9     public MyStack(){
10         this(CAPACITY);
11     }
12 
13     public MyStack(int capacity) {
14         elements = new Object[capacity];
15     }
16     
17     public void push(Object o){
18         int len=elements.length;
19         if(size>=len){
20             Object[] temp=new Object[2*len];
21             System.arraycopy(elements, 0, temp, 0, len);
22             elements=temp;
23         }
24         elements[size++]=o;
25     }
26     public Object pop(){
27         return elements[--size];
28     }
29     public Object peek(){
30         return elements[size-1];
31     }
32     public int getSize(){
33         return size;
34     }
35     public boolean empty(){
36         return size==0;
37     }
38 
39 }

测试代码:

 1 package stack;
 2 
 3 public class TestStack {
 4 
 5     /**
 6      * @param args
 7      */
 8     public static void main(String[] args) {
 9         test2();
10     }    
11 
12     private static void test2() {
13         MyStack stack = new MyStack();
14         for(int i=1;i<=15;i++){
15             stack.push("str"+i);
16         }
17         while(!stack.empty()){
18             System.out.println(stack.pop());
19         }
20         System.out.println("--end--");
21     }    
22 
23 }

 

Java栈的实例模拟

标签:

原文地址:http://www.cnblogs.com/SeaSky0606/p/4716264.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!