在通用堆栈类中创建通用堆栈

时间:2015-04-24 09:02:22

标签: java object generics stack

我试图教自己一些java并且我坚持一个看似简单的问题,但我似乎还没有找到解决方案。

到目前为止我所拥有的:

接口:

public interface ADTStack<T> {


public boolean isEmpty();


public void push(T element);


public T top() throws IllegalStateException;


public void pop() throws IllegalStateException;
}

Class Stack:

public class Stack<T> implements ADTStack<T> {

private java.util.LinkedList<T> data;  



public Stack() {
    data = new java.util.LinkedList<T>();
}

@Override
public boolean isEmpty() {
    return data.isEmpty();
}

@Override
public void push(T element) {
    data.add(0, element);
}

@Override
public T top() throws IllegalStateException {
    if (isEmpty()) {
        throw new IllegalStateException("Stack is emtpy.");
    }
    return data.getFirst();
}

@Override
public void pop() throws IllegalStateException {
    if (isEmpty()) {
        throw new IllegalStateException("Stack is empty.");
    }
    data.remove(0);
}

好的,所以这就是我想要做的。 我试图编写一个方法equals来比较两个堆栈。 我的想法是使用第三个堆栈来将两个堆栈都放入 比较它们后的原始状态。

以下是我所拥有的:

    Stack supportStack = new Stack();

public boolean equals(ADTStack<T> s){
    if (data.isEmpty() != s.isEmpty()){         
        return false;
    }
    if (data.isEmpty() && s.isEmpty()){     
        return true;
    }

    T element_a  =  this.top();             
    T element_b  = s.top();


    if( (element_a ==null && (element_b !=null) || !element_a.equals(element_b) || element_a != null && element_b == null)){
        return false;
    }

    data.pop();
    s.pop();                        
    supportStack.push(element_a);       
    boolean result = data.equals(s);    

    while (!supportStack.isEmpty()){        
        data.push(supportStack.top());   
        s.push(supportStack.top());
        supportStack.pop();
    }
    return result;                      
}

编译代码时出现了很多错误,似乎出现了问题:

Stack supportStack = new Stack();

我真的不知道错误是什么以及如何解决错误。我做了一个跑步者班,我尝试了构造函数,它起作用,所以我很困惑。

public class Runner {

   public static void main(String[] args){
      Stack test = new Stack();
      test.push(12);
      System.out.println(test.top());
   }
}

我很乐意接受任何建议或建设性的批评,因为我自己教学,如果有什么不清楚的话,请随时提出。

1 个答案:

答案 0 :(得分:3)

Stack supportStack = new Stack();

Stack被称为raw type:它就像不使用泛型。你需要使用:

Stack<T> supportStack = new Stack<T>();

但是,作为一个提示:你不需要这样做。你可以这样做:

return this.data.equals( s.data );