在Java中复制java.util.Stack

时间:2012-07-21 08:27:28

标签: java copy stack

我正在寻找一种在Java中复制java.util.Stack的正确方法。

Stack似乎没有复制构造函数,我在文档中找到的唯一可以做我想要的就是clone方法。

但是,如果我写

Stack<Integer> stack = (Stack<Integer>) oldstack.clone();

编译器向我发出有关未选中类型的警告。

我是否有“正确”的方式来复制Stack?如果没有,这里最明智的做法是什么?我不希望有任何警告,我觉得有点愚蠢的迭代和复制价值(虽然后者可能是最明智的事情)。

2 个答案:

答案 0 :(得分:10)

我猜你可以使用addAll

Stack<Integer> stack = new Stack();
stack.addAll(oldStack);

但是,文档说明你应该优先使用Deque而不是Stack类,并且你有你想要的东西:

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

答案 1 :(得分:0)

使用clone没有错。编译器会给出错误,指出您有未处理(未取消选中)异常CloneNotSupportedException。这只是Java及其检查异常的标准故事,不应该是不使用clone的原因。虽然确实整个clone机制在今天被认为是古老的,它实际上只是由Java标准库中最古老的类实现,但它确实适用于那些类,并且具有比其更高性能的潜在奖励。替代方案(本机内存复制)。