将栈复制到数组

5
这是我拥有的算法版本:

我有一个算法版本:

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

在我的代码中,这个数组的边界是可以保证没问题的。

我想知道是否有一个库算法可以实现这个功能,但搜索没有找到任何结果。


Stack 是你自己实现的还是 Java 的? - Sotirios Delimanolis
Java的java.util.Stack - user473973
10
请查看其重载的toArray()方法。 - Sotirios Delimanolis
toArray(T[] a) 已经做了。 - Alexis C.
@SotiriosDelimanolis 谢谢!那个有效。 - user473973
2个回答

8

Stack是Vector的子类,而Vector已经支持了这一点,可以尝试使用以下代码:

stack.toArray(array)

这里是相关Javadoc的链接:

点击这里


它实际上是从java.util.Vector继承的,而不是List(你的链接甚至指向了Vector文档)。 - ajp15243

3

我发现当我使用 toArray 方法时,结果的顺序与我预期的相反。当我创建这个堆栈时:

Stack<String> stack = new Stack<>();
stack.push("foo");
stack.push("bar");

我希望有一个像这样的数组:

{"bar", "foo"}

因为栈是后进先出的。如果你每次弹出栈中的元素,首先会弹出"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转换为LinkedList时,这个问题困扰了我。API几乎相同,但代码依赖于toArray(),现在返回的结果与预期相反。 - James Scriven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接