ArrayList
リストの最初または途中に挿入すると、常にパフォーマンスが向上しますが、リストの最後に追加するだけなのでO(n)
、最後の挿入は維持できます。O(1)
O(1)
最初に挿入を作成し、O(n)
平均して挿入を作成する方法についての高レベルのアイデアがありますがO(n/2)
、基になる配列構造でそれが可能かどうかはわかりません。
私のアイデア
実際にArrayList
は、しきい値に達したときに自分自身を「サイズ変更」するより大きな配列であるため、リストの最後だけでなく、リストの先頭と末尾の両方でサイズを変更できないのはなぜですか? これにより、最初に挿入できるようになりO(1)
、途中で挿入を書き換えて、挿入自体の最短ルートを取ることもできます。(たとえば、 index に挿入する場合、に移動するよりも移動する1
方が簡単です)。0
2
n
Sun が最初にこれを行わなかった理由について、私が考える答えは、Arrays.copyOf
and の拡張子の書き方にあると思いますSystem.arrayCopy
。どちらもリストの先頭から開始し、より大きな配列にコピーします。これら 2 つのメソッドの Sun ソース コードを確認しましたが、私の Java スキル レベルでは少し高度です。
質問
私の考えでは、これが機能するかどうかについての主な質問が 2 つあります。
1)まず、サブ配列をより大きな配列の真ん中に挿入するように書き換え/オーバーロードできますArrays.copyOf
か?System.arrayCopy
2) それを行うことの Big O への影響は何ですか?
それで、これは良い考えですか、それともこれを実行不可能にする明らかな何かが欠けていますか?
前もって感謝します!