Java 方法将堆栈复制到新堆栈中并返回它,而不使用使用标准API类的单个队列更改原始堆栈

Java 方法将堆栈复制到新堆栈中并返回它,而不使用使用标准API类的单个队列更改原始堆栈,java,stack,queue,Java,Stack,Queue,好的,所以我试着做一个方法来实现我在标题中写的。应该很清楚发生了什么。然而,我觉得我让事情变得比应该的更复杂了。我将堆栈复制到队列中,导致堆栈向后:[4,3,2,1] 然后我将其复制回堆栈,然后再复制回队列,以便按正确的顺序获取它:[1,2,3,4] 然后我窥视复制的堆栈,并将其移到原始堆栈中。 然后我返回复制的堆栈。 我的主要方法是打印以下内容: [1,2,3,4] [1,2,3,4] ^顺便说一句,有人知道如何正确对齐上面的代码吗?我很烦 那么有没有更简单的实现 我可以使用的方法如下: 堆

好的,所以我试着做一个方法来实现我在标题中写的。应该很清楚发生了什么。然而,我觉得我让事情变得比应该的更复杂了。我将堆栈复制到队列中,导致堆栈向后:[4,3,2,1] 然后我将其复制回堆栈,然后再复制回队列,以便按正确的顺序获取它:[1,2,3,4] 然后我窥视复制的堆栈,并将其移到原始堆栈中。 然后我返回复制的堆栈。 我的主要方法是打印以下内容: [1,2,3,4] [1,2,3,4]

^顺便说一句,有人知道如何正确对齐上面的代码吗?我很烦

那么有没有更简单的实现

我可以使用的方法如下:

堆栈类实现可克隆接口。clone方法将克隆堆栈并返回对新堆栈的引用。

堆栈是一个集合,集合可以

您也可以简单地迭代:

Iterator<Integer> intItr = origStack.iterator();
while(intItr.hasNext())  {
   intStackCopy.push(intItr.next());
}
如果您必须使用“队列”:

public Stack<Integer> copyStack(Stack<Integer> orig)  {
   Queue<Integer> q = new Queue<Integer>();
   q.addAll(orig);
   Stack<Integer> intStackCopy = new Stack<Integer>();
   intStackCopy.addAll(q);
   return  intStackCopy;
}

您可以使用my或@Chamil答案中的任何方法来完成这个冗余队列。原作不需要以任何方式还原,因为它从未被更改。

我认为我不允许使用它。这就是我所说的标准API类。我将在问题中添加我认为允许使用的链接。close是Object的一种方法,因此它是标准的。请检查我更新问题的内容。我很确定我不能简单地克隆它,因为我的老师说我们可以在方法中使用一个队列。可克隆接口在java.lang包下,它包含所有java基本类。克隆方法也是java中的标准方法。任何使用java的人都必须非常熟悉这种克隆方法。是你可以使用的东西之一。所以它有克隆方法。怎么了?我想我不允许用那个。这就是我所说的标准API类。我将添加我认为允许我使用的问题的链接,这两种方法都在您指定的网页中。它们列在继承自类java.util.Vector的方法下。编写一个方法copyStack,该方法以堆栈S为参数,并返回一个包含与S相同元素且顺序相同的新堆栈。在方法完成之前,它必须将S的内容恢复到其原始状态,并以相同的顺序返回相同的内容。除了该方法返回的新堆栈之外,它可以使用的唯一附加数据结构是单个队列。就此而言,克隆也位于该网页上,并且位于从类java.util.Vector继承的方法下。很抱歉,但这没有意义。我的答案中的两种方法,除了从另一个答案中克隆方法之外,都可以满足您的需求。
Stack<Integer> intStackCopy = new Stack<Integer>();
intStackCopy.addAll(origStack);
Iterator<Integer> intItr = origStack.iterator();
while(intItr.hasNext())  {
   intStackCopy.push(intItr.next());
}
public Stack<Integer> copyStack(Stack<Integer> orig)  {
   Queue<Integer> q = new Queue<Integer>();
   q.addAll(orig);
   Stack<Integer> intStackCopy = new Stack<Integer>();
   intStackCopy.addAll(q);
   return  intStackCopy;
}