У меня есть две коллекции - ArrayList и Stack. Я использую стек, потому что мне нужна была простая функциональность pop / push для этого фрагмента кода. ArrayList - это, по сути, переменная out, так как это небольшой фрагмент кода в функции.
Итак, переменные определены как таковые, затем выполняется код для добавления элементов в стек.
ArrayList<String> out = new ArrayList<String>();
/* other code.. */
Stack<String> lineStack = new Stack<String>();
/* code that adds stuff to the stack */
Вопрос в том, что теперь, когда у меня есть полностью заполненный стек, как мне поместить его в выходной ArrayList в обратном порядке, а затем в порядке всплывающих окон.
Моё первое придуманное решение было
while(!lineStack.empty()) {
out.add(0, lineStack.pop());
}
... что работает, но я беспокоюсь об эффективности добавления элемента в начало ArrayList (который заставляет все существующие элементы перемещаться ... это связанный список (я полагаю) ... большое дело. но все еще вызывает беспокойство). Кроме того, я запускаю это через цикл ... возможно, излишне.
Итак, мое второе решение, которое не включало в себя циклы (по крайней мере, в моем коде, я уверен, что это делают внутренние вызовы).
List l = lineStack.subList(0, lineStack.size());
out.addAll(l);
Я знаю, что мне не нужно распределять список, но он сохранится для более чистого кода. Однако я не уверен, что это даст мне особенно полезное увеличение производительности.
Итак, мой вопрос: какой из них, вероятно, будет наиболее эффективным для наборов размеров от МАЛЕНЬКОГО до СРЕДНЕГО? Если бы было более эффективное решение, что бы это было?