我正在寻找一种在Java中复制java.util.Stack
的正确方法。
Stack
似乎没有复制构造函数,我在文档中找到的唯一一个可能实现我想要的功能的方法是clone
方法。
但是,如果我写
Stack<Integer> stack = (Stack<Integer>) oldstack.clone();
编译器对未检查的类型发出警告。
有没有一种"合适"的方式让我复制Stack
?如果不是这样,在这里做什么才是最明智的呢?我不希望有任何警告,而且我觉得迭代和复制值有点傻(尽管后面的可能是最明智的做法)。
我想你可以使用addAll
:
Stack<Integer> stack = new Stack();
stack.addAll(oldStack);
然而,文档中指出,您应该优先使用Deque而不是Stack类,这样您就可以立即获得所需的内容:
Deque<Integer> stack = new ArrayDeque<Integer>(oldStack);
使用clone
没有任何问题。编译器会给您一个错误,即您有一个未处理的(未选中)异常CloneNotSupportedException
。这只是Java及其已检查异常的标准情况,不应该是不使用clone
的原因。虽然整个clone
机制在今天确实被认为是过时的,而且它实际上只由Java标准库中最古老的类实现,但它确实适用于这些类,并且具有比其他机制(本地内存复制)更高性能的潜在好处。