在java中复制java.util.Stack
我正在寻找一种在java中复制在java中复制java.util.Stack,java,copy,stack,Java,Copy,Stack,我正在寻找一种在java中复制java.util.Stack的正确方法 Stack似乎没有一个复制构造函数,我在文档中找到的唯一可能实现我想要的功能就是clone方法 然而,如果我写 Stack<Integer> stack = (Stack<Integer>) oldstack.clone(); Stack Stack=(Stack)oldstack.clone(); 编译器给我一个关于未检查类型的警告 是否有一种“适当”的方式让我复制堆栈?如果不是的话,在这里最明
java.util.Stack
的正确方法
Stack
似乎没有一个复制构造函数,我在文档中找到的唯一可能实现我想要的功能就是clone
方法
然而,如果我写
Stack<Integer> stack = (Stack<Integer>) oldstack.clone();
Stack Stack=(Stack)oldstack.clone();
编译器给我一个关于未检查类型的警告
是否有一种“适当”的方式让我复制
堆栈
?如果不是的话,在这里最明智的做法是什么?我不希望有任何警告,我觉得对值进行迭代和复制有点愚蠢(尽管后者可能是最明智的做法)。您可以使用addAll
,我想:
Stack<Integer> stack = new Stack();
stack.addAll(oldStack);
Stack Stack=新堆栈();
stack.addAll(oldStack);
但是,文档说明您应该优先使用Deque而不是Stack类,这样您就可以立即获得所需的:
Deque<Integer> stack = new ArrayDeque<Integer>(oldStack);
Deque stack=new ArrayDeque(oldStack);
使用克隆没有什么错。编译器向您提供一个错误,即您有一个未处理的(未取消选中)异常CloneNotSupportedException
。这只是Java及其检查异常的标准情况,它不应该成为不使用clone
的理由。虽然整个clone
机制确实在今天被视为过时的,而且它实际上只由Java标准库中最古老的类实现,但它确实适用于这些类,并且具有比其他方法(本机内存复制)更高性能的潜在优势