ArrayListはおそらくこの点では優れていますが、実際には付属のコレクションにも依存します。最良の場合の複雑さはO(1)ですが、提供されたCollectionのtoArray()
メソッドも一定の複雑さを持つ場合のみです。
// java.util.ArrayList.addAll
// Oracle JDK 1.8.0_91
public boolean addAll(Collection<? extends E> c) {
Object[] a = c.toArray(); // O(?) <-- depending on other type
int numNew = a.length;
ensureCapacityInternal(size + numNew); // Increments modCount
System.arraycopy(a, 0, elementData, size, numNew);
size += numNew;
return numNew != 0;
}
をSystem.arrayCopy
は、一定時間操作であるか否かにいくつかの意見の相違があります:実際に割り当てを行い
System.arraycopyの()の呼び出しはO(1)、とにかくは下記を参照してください、複雑です。 Some say no。 Others suggest it is。
to this benchmark I hacked togetherによれば、真ん中にあります。コピータイムは約100の配列アイテムまでほぼ一定ですが、そこから線形に成長し、私はいくつかの種類のページングがそこに関わっていると推測しています。したがって、配列が非常に小さい場合を除き、System.arrayCopy
は線形時間の複雑さを持ちます。
http://stackoverflow.com/questions/6540511/time-complexity-for-java-arraylist –
することができます[This SO Post](http://stackoverflow.com/questions/559839/big-o-summary) -for-java-collections-framework-implementation)が役に立ちます。 – Sanjeev
リンクありがとうございました – Kaizokun