这是我的算法的一个版本:
public void copyStackToArray(Stack<Integer> stack) {
int i = 0;
while (!this.bestRouteStack.empty()) {
this.array[i++] = stack.pop();
}
}
(对于我的代码,数组上的边界保证可以正常使用)
我想知道是否有一个库算法可以做到这一点,但搜索没有任何结果。
答案 0 :(得分:7)
答案 1 :(得分:0)
我发现当我使用toArray
方法时,我得到的结果与我预期的顺序相反。当我创建这个堆栈时:
Stack<String> stack = new Stack<>();
stack.push("foo");
stack.push("bar");
我想要一个像:
这样的数组{"bar", "foo"}
当然,堆栈是LIFO。如果你从堆栈中弹出每个元素,你会弹出&#34; bar&#34;首先,然后&#34; foo&#34;。
相反,toArray
会返回{"foo", "bar"}
。
解决方案是使用LinkedList
代替。在LinkedList上有一个push
方法,它与addFirst
执行相同的操作,结果将是一个列表,其内容(如果你当然遍历它)是&#34; bar&#34;然后&#34; foo&#34;。它还有toArray
方法,可以按预期返回。
测试用例:
LinkedList<String> list = new LinkedList<>();
list.push("foo");
list.push("bar");
String[] arr = list.toArray(new String[0]);
Assert.assertArrayEquals(new String[] { "bar", "foo" }, arr);