java栈的实现有两种方式:

一.使用数组来实现:


//使用数组实现栈,功能包括进行内存扩展
public class Stack {
    private int []data;
    private int length;//表示初始化栈的内存长度
    private int top;//用来表示栈的实际长度
    private final int expandLength=20;//表示扩展的长度
                                                                                            
    public Stack(int length){
        this.length=length;
        top=-1;//初始化为-1
        data=new int[length];      
    }
    //压栈
    public void push(int value){
        if(top<length-1)
            data[++top]=value;
        else{
            //进行内存扩展
            int []temp=new int[length+expandLength];
            for(int i=0;i<length;i++){
                temp[i]=data[i];
            }
            data=temp;
            data[++top]=value;
        }
    }
    //出栈
    public int pop(){
        return data[top--];
    }
    //返回栈头元素
    public int peek(){
        return data[top];
    }
    //返回栈的长度
    public int getLength(){
        return top+1;
    }
    //判断是否为满
    public boolean isfull(){
        return(top==length-1);
    }
}

二.使用数组线性表来实现栈:

//使用线性表实现栈的存储,这样不需要考虑内存扩展的情况
import java.util.*;
public class linkedStack<T> {
    private LinkedList<T> Linkedlist;//定义一个线性表
                                                                              
    public linkedStack(){
        Linkedlist=new LinkedList<T>();
    }
    //压栈
    public void push(T value){
        Linkedlist.add(value);
    }
    //出栈
    public T pop(){
        T data=Linkedlist.get(getLength()-1);
        Linkedlist.remove(getLength()-1);
        return data;
    }
    //得到栈头元素
    public T peek(){
        return Linkedlist.get(Linkedlist.size()-1);
    }
    //栈的长度
    public int getLength(){
        return Linkedlist.size();
    }
}

就我个人而言,我更喜欢第二种实现方法,第二种可以自己定义所要存储的数据类型,有人会说为啥第一种方法不用泛型,我有试过,但是会非常麻烦。首先泛型对数组的定义本来就要限制,所以综合考虑,本人就在第一种方法中简化了,定义数据类型为int类型.如果大家有更好的方法,希望能提出,相互提高,这里仅仅表明我个人的想法。