zoukankan      html  css  js  c++  java
  • 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--
  • 相关阅读:
    测试一个纸杯需要考虑什么?
    第三十三天-rsync高级同步工具深度实战
    运维人员必须熟悉的运维工具汇总
    Mysql 高负载排查思路
    查看mysql主从配置的状态及修正 slave不启动问题
    第三十二天-rsync高级同步工具基础
    第三十一天-两个例题
    linux mail 命令参数
    第三十天-ssh key企业批量分发自动化管理案例
    第二十九天-ssh服务重要知识深入浅出讲解
  • 原文地址:https://www.cnblogs.com/SeaSky0606/p/4716264.html
Copyright © 2011-2022 走看看