这是算法的一个版本,我有:复制堆栈阵列
public void copyStackToArray(Stack<Integer> stack) {
int i = 0;
while (!this.bestRouteStack.empty()) {
this.array[i++] = stack.pop();
}
}
(在阵列上的边界,保证没事这里我的代码)
我想知道是否有是一个库算法,可以做到这一点,但搜索没有任何结果。
这是算法的一个版本,我有:复制堆栈阵列
public void copyStackToArray(Stack<Integer> stack) {
int i = 0;
while (!this.bestRouteStack.empty()) {
this.array[i++] = stack.pop();
}
}
(在阵列上的边界,保证没事这里我的代码)
我想知道是否有是一个库算法,可以做到这一点,但搜索没有任何结果。
我发现当我使用toArray
方法时,我得到了与我预期相反的结果。当我创造了这个堆栈:
Stack<String> stack = new Stack<>();
stack.push("foo");
stack.push("bar");
我想要像一个数组:
{"bar", "foo"}
原因当然栈LIFO。如果你将每个元素从堆栈中弹出,你首先会弹出“bar”,然后是“foo”。
取而代之,toArray
返回{"foo", "bar"}
。
解决方案是使用LinkedList
代替。在LinkedList上有一个push
方法,它和addFirst
一样执行,结果是一个列表,其内容(如果你经过它的话)是“bar”,然后是“foo”。它也有如预期返回的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);
是'Stack'自己的实现或Java的? –
Java的'java.util.Stack' – user473973
检查出它重载的'toArray()'方法。 –