Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中复制java.util.Stack_Java_Copy_Stack - Fatal编程技术网

在java中复制java.util.Stack

在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中复制
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标准库中最古老的类实现,但它确实适用于这些类,并且具有比其他方法(本机内存复制)更高性能的潜在优势