3

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

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

但是,如果我写

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

编译器给我一个关于未检查类型的警告。

我是否有一种“正确”的方式来复制 a Stack?如果不是,这里最明智的做法是什么?我宁愿没有任何警告,而且我觉得迭代和复制值有点愚蠢(尽管后者可能是最明智的做法)。

4

2 回答 2

10

你可以使用addAll,我猜:

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

但是,文档说明您应该优先使用 Deque 而不是 Stack 类,并且您可以立即获得所需的内容:

Deque<Integer> stack = new ArrayDeque<Integer>(oldStack);
于 2012-07-21T08:29:43.877 回答
0

使用没有任何问题clone。编译器给你一个错误,你有一个未处理的(不是未经检查的)异常CloneNotSupportedException。这只是 Java 及其检查异常的标准故事,它不应该成为不使用clone. 虽然整个clone机制在今天确实被视为过时,并且仅由 Java 标准库中最古老的类实现,但它确实适用于这些类,并且具有比替代方案(本机内存复制)更高性能的潜在好处)。

于 2012-07-21T12:52:41.177 回答