我有一个关于使用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
在堆栈之间移动数字的最佳方法是什么?
答案 0 :(得分:3)
由于Java中的一些糟糕的设计决策,可以制作Collections.sort(stack1)
,然后只需弹出第一个堆栈并推入第二个。
但请注意,自Java 6起,最好使用ArrayDeque
(或其他Deque
)代替Stack
。如果堆栈不是List
,则序列为:
List
或数组中)Collections.sort(..)
或Arrays.sort(..)
)但这些都是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));