堆栈之间的Java移动数

时间:2011-04-03 21:01:46

标签: java stack

我有一个关于使用Stack with Java的问题。

假设我有三个堆栈

Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
Stack<Integer> stack3 = new Stack<Integer>();

stack1.push(10);
stack1.push(5);
stack1.push(25);
stack1.push(2);
stack1.push(100);

我希望这些数字在stack3中从高到低依次排列。 所以stack3喜欢100,25,10,5,2

在堆栈之间移动数字的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

由于Java中的一些糟糕的设计决策,可以制作Collections.sort(stack1),然后只需弹出第一个堆栈并推入第二个。

但请注意,自Java 6起,最好使用ArrayDeque(或其他Deque)代替Stack。如果堆栈不是List,则序列为:

  1. 将它们从第一个堆栈中取出(在List或数组中)
  2. 对它们进行排序(Collections.sort(..)Arrays.sort(..)
  3. 将它们按顺序推入另一个堆栈
  4. 但这些都是java“hacks”。如果是家庭作业问题,他们更有可能希望你实施类似“河内塔”问题,如smas所述。

答案 1 :(得分:1)

这个问题被称为:河内塔问题,请尝试在维基百科/谷歌中找到此代码/说明。

答案 2 :(得分:0)

重新措辞Bozho的回答:

    Stack<Integer> stack3 = new Stack<Integer>();
    Integer[] arr = stack.toArray(new Integer[stack.size()]);
    Arrays.sort(arr);
    stack3.addAll(Arrays.asList(arr));