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

 

转载于:https://www.cnblogs.com/SeaSky0606/p/4716264.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值