将堆栈复制到数组

时间:2014-01-06 21:24:35

标签: java

这是我的算法的一个版本:

public void copyStackToArray(Stack<Integer> stack) {
    int i = 0;
    while (!this.bestRouteStack.empty()) {
        this.array[i++] = stack.pop();
    }
}

(对于我的代码,数组上的边界保证可以正常使用)

我想知道是否有一个库算法可以做到这一点,但搜索没有任何结果。

2 个答案:

答案 0 :(得分:7)

Stack子类Vector已经支持这个,试试这个...

stack.toArray(array)

Here is the Javadoc for this

答案 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);