扩展堆栈库

时间:2013-11-07 21:23:39

标签: java inheritance stack

EStack类工作正常并给出结果输出(它取出顶部元素并将其副本放在方法下推中指定的堆栈的任何位置)。

但是,我只能让它适用于整数(因此将大部分内容转换为整数)。我怎么能让它适用于放在堆栈中的任何类型的对象(int,string,char,double,float等)?

import java.util.*;

public class EStack extends Stack{

    public static void pushdown(Stack s, int i){
        Integer marker = (Integer) s.size() - i;
        Integer top = (Integer) s.peek();
        Stack temp = new Stack();
        while(s.empty() != true){
            Integer elem = (Integer) s.pop();
            temp.push(elem);
        }
        while(temp.empty() != true){
            if(marker == s.size()){
                s.push(top);
            }
            Integer elem = (Integer) temp.pop();
            s.push(elem);
        }
    }

    public static void main(String[] args){
        Stack s = new Stack();
        s.push(1);
        s.push(2);
        s.push(3);
        s.push(4);

        pushdown(s, 2);
        while(s.empty() != true){
            System.out.println(s.pop());
        }
    }
}

输出:

4
3
4
2
1

2 个答案:

答案 0 :(得分:1)

我认为这会有效,因为Stack接收Object

public static void pushdown(Stack s, int i){
    Integer marker = (Integer) s.size() - i;
    Object top = s.peek();
    Stack temp = new Stack();
    while(s.empty() != true){
        Object elem = s.pop();
        temp.push(elem);
    }
    while(temp.empty() != true){
        if(marker == s.size()){
            s.push(top);
        }
        Object elem = temp.pop();
        s.push(elem);
    }
}

基本上我删除了所有整数演员。

答案 1 :(得分:0)

看一下java.util.Stack(你正在扩展)是如何用泛型做的。这是 Oracle generics documentation

如果你看一下java.util.Stack,你会注意到它实际上被称为Stack<E>,它可以被读作“E类型的一堆对象”,在整个类中,通常都是作为堆栈中对象的类型(在您的情况下为整数),而不是“E”。