メモリ効率は良いが、あまりパフォーマンスが良くないソリューションは次のとおりです。
public static String[] listPlusOne(final ArrayList<String> list, final String prepend)
{
final String[] arr = list.toArray(new String[list.size() + 1]);
System.arraycopy(arr, 0, arr, 1, list.size());
arr[0] = prepend;
return arr;
}
String
このソリューションでは、配列を1 つだけ割り当てSystem.arrayCopy()
、すべての要素を 1 つ上の位置に移動するために を使用してメモリ移動を実行します。
一般的に言えば、メモリの移動は常に最善の解決策ではありません。ALinkedList
は非常に迅速な要素のプリペンドを許可しますが、ランダムな位置で要素にアクセスする場合、O(n) の複雑さがあります。はArrayList
、前置 (メモリの移動、再割り当て) では遅くなりますが、要素にアクセスするときは O(1) になります。
したがって、上記のコードのようなものを使用するか、要素をリストの先頭に追加します。