【问题标题】:Should I use my own implementation or the stack class in java.util package? [closed]我应该使用自己的实现还是 java.util 包中的堆栈类? [关闭]
【发布时间】:2017-12-21 22:17:54
【问题描述】:

在 Java 中,我可以像下面那样实现我自己的 Stack 或使用已经提供的 java.util.Stack 类。

public class stack {

private int maxSize; //max size of stack
private char[] stackArray;
private int top; //index poistion of last element

public stack(int size){
    this.maxSize=size;

    this.stackArray=new char[maxSize];
    this.top=-1; //    
    }


public void push(char j){

    if (isFull()) {
        System.out.println("SORRY I CANT PUSH MORE");
    }else{

    top++;
    stackArray[top]=j;
        }
    }

public char pop(){

    if(isEmpty()){
        System.out.println("Sorry I cant pop more!");
        return '0';
    }else{

       int oldTop=top;
       top--;
       return stackArray[oldTop];    
       }
    }


public char peek(){
    if(!isEmpty()) {
        return stackArray[top];
        }
    }


public boolean isEmpty(){
    return (top==-1);
    }

public boolean isFull(){
    return (maxSize-1 == top);
    }

} //end of stack class

第二种方法是使用Java API中的Stack类。

Stack<String> stacky = new Stack<>();

Java 中Queues 的情况也是如此。

在使用StacksQueues 时,我应该使用自己的实现吗?

【问题讨论】:

    标签: java data-structures stack queue


    【解决方案1】:

    一般来说,您永远不应该使用您自己的 Java 运行时库中已经存在的东西的实现,因为该代码经过测试的次数远远超过您的代码可能经过测试的次数。

    另外,一般来说,你永远不应该使用旧的java.util.Stack 类,因为它是synchronized。正如Stack 的 javadoc 所说:

    Deque 接口及其实现提供了一组更完整和一致的 LIFO 堆栈操作,应优先使用该类。例如:

    Deque<Integer> stack = new ArrayDeque<Integer>();
    

    不管怎样,对于你的问题“Java中有多少种实现栈的方法?”,Java运行时库中有5种栈实现:

    当然,任何List 实现都可以用作堆栈,但没有方便的方法,例如对于ArrayList,您需要使用list.add(list.size(), e) 将元素推入“堆栈”。

    【讨论】:

      【解决方案2】:

      在生产代码中,您将始终使用 Java 库中提供的实现。自己实现它的唯一原因是出于教育目的(了解数据结构内部的工作原理)。

      作为 Java 一部分的实现(如 java.util.Stackjava.util.ArrayList 等)已经过充分测试并且运行良好,并且可以轻松地包含在任何项目中。另一方面,您自己的实现更有可能包含错误,并且代码不会那么可移植,因为它可能使用非标准功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-04
        • 2012-03-31
        • 1970-01-01
        • 2018-09-26
        • 1970-01-01
        • 1970-01-01
        • 2019-05-27
        • 1970-01-01
        相关资源
        最近更新 更多