ArrayListとStackの2つのコレクションがあります。このコードのビットにいくつかの単純なポップ/プッシュ機能が必要だったので、スタックを使用します。ArrayListは、関数内のコードの小さなセクションであるため、基本的にout変数です。
したがって、変数はそのように定義され、コードが実行されてスタックに要素が追加されます。
ArrayList<String> out = new ArrayList<String>();
/* other code.. */
Stack<String> lineStack = new Stack<String>();
/* code that adds stuff to the stack */
問題は、スタックが完全に実装されたので、ポップの順序とは逆の順序でoutArrayListに配置するにはどうすればよいかということです。
私が最初に考えた解決策は
while(!lineStack.empty()) {
out.add(0, lineStack.pop());
}
...これは機能しますが、ArrayListの先頭に要素を追加する効率について心配しています(これにより、既存のすべての要素をシフトする必要があります..リンクリストです(私は信じています)..大したことですが、それでも懸念)。また、私はこれをループで実行しています...おそらく不必要に。
したがって、ループを含まない2番目のソリューション(少なくとも私のコードでは、バックエンド呼び出しがループを実行していると確信しています)。
List l = lineStack.subList(0, lineStack.size());
out.addAll(l);
リストを割り当てる必要がないことはわかっていますが、コードをよりクリーンにするために保持されます。ただし、これによってパフォーマンスが特に向上するかどうかはわかりません。
だから、私の質問は:これらのどれが小から中サイズのセットに最も効率的である可能性がありますか?より効率的な解決策があるとしたら、それは何でしょうか?