我正在寻找一种在Java中复制java.util.Stack
的正确方法。
Stack
似乎没有复制构造函数,我在文档中找到的唯一可以做我想要的就是clone
方法。
但是,如果我写
Stack<Integer> stack = (Stack<Integer>) oldstack.clone();
编译器向我发出有关未选中类型的警告。
我是否有“正确”的方式来复制Stack
?如果没有,这里最明智的做法是什么?我不希望有任何警告,我觉得有点愚蠢的迭代和复制价值(虽然后者可能是最明智的事情)。
答案 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标准库中最古老的类实现,但它确实适用于那些类,并且具有比其更高性能的潜在奖励。替代方案(本机内存复制)。