Java栈的实例模拟

前言:

   “后进先出”---是栈(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 }

 测试结果:

str15
str14
str13
str12
str11
str10
str9
str8
str7
str6
str5
str4
str3
str2
str1
--end--

 

posted @ 2015-08-09 20:22  Sea_Sky  阅读(1563)  评论(0编辑  收藏  举报

转载请注明出处! About me