在java中复制java.util.Stack



我正在寻找一种在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标准库中最古老的类实现,但它确实适用于这些类,并且具有比其他机制(本地内存复制)更高性能的潜在好处。

最新更新