我有两个集合 - 一个 ArrayList 和一个 Stack。我使用堆栈是因为我需要一些简单的弹出/推送功能来处理这段代码。ArrayList 本质上是 out 变量,因为这是函数中的一小段代码。
因此,变量是这样定义的,然后运行代码以将元素添加到堆栈中。
ArrayList<String> out = new ArrayList<String>();
/* other code.. */
Stack<String> lineStack = new Stack<String>();
/* code that adds stuff to the stack */
问题是,既然我有一个完全填充的堆栈,我如何将它以与弹出顺序相反的顺序放置在 out ArrayList 中。
我第一个想到的解决方案是
while(!lineStack.empty()) {
out.add(0, lineStack.pop());
}
...这行得通,但是我担心将元素添加到 ArrayList 开头的效率(这会迫使所有现有元素都需要移动..这是一个链表(我相信)..很重要..但仍然关注)。此外,我正在通过一个循环运行它......也许是不必要的。
所以,我的第二个不涉及循环的解决方案(至少在我的代码中,我确信后端调用正在这样做)。
List l = lineStack.subList(0, lineStack.size());
out.addAll(l);
我知道我不需要分配列表,但它会保留更清晰的代码。但是,我不确定这是否会给我带来特别有用的性能提升。
所以,我的问题是:对于小到中尺寸的套装,哪一个可能最有效?如果有更有效的解决方案,它会是什么?