如何在Java中创建堆栈的副本

时间:2016-01-05 05:05:10

标签: java nullpointerexception stack

我的老师要求我创建一个Stack的副本,它返回一个新的Stack,它包含与指定Stack相同的元素和顺序。

如果我只能使用Stack独有的方法,我会将每个元素从Stack中弹出并放到一个que上。然后我会从que的底部弹出一个新的Stack并返回新的Stack。

但是,我认为既然Stack继承自Vector,我可以使用Vector中的addAll()方法!

这是Java代码实现:

public class DuplicateStack {

private Stack backStack;

public Stack duplicateStack(Stack s) {
    backStack.addAll(s);
    return backStack;
}

这似乎为我做了所有的工作。唯一的问题是,当我在main中运行它时,我不断收到nullPointerException:

Stack s1 = new Stack();
s1.push("c");
s1.push("b");
s1.push("a");

DuplicateStack dup = new DuplicateStack();
Stack s2 = dup.duplicateStack(s1);

while(!s2.empty())
    System.out.println(s2.pop());

错误来自我的DuplicateStack类中的addAll()调用。 所以我的问题是为什么我从addAll()获取nullPointerException,除了使用前面描述的方法(仅使用Stack唯一方法)之外,有没有办法制作副本?

1 个答案:

答案 0 :(得分:2)

您得到NullPointerException,因为backStacknull(您永远不会初始化它)。变化

private Stack backStack;

类似

private Stack backStack = new Stack();