私の仕事のために、私はタイムチャートのテストをいくつか行っています。 私は私を驚かせ、理解を助ける必要がある何かに来ました。ArrayListからの削除で初期容量が重要なのはなぜですか?
私はキューとしてデータ構造をほとんど使用せず、アイテムの数に応じて削除がどのように高速であるかを知りたいと考えました。また、初期の容量を設定していない場合は、初期容量を設定しないで、フロントから削除して10個の項目を持つarraylistは、初期容量を設定しても(15まで)はるかに遅くなります。どうして?そしてなぜそれが100の項目で同じであるか。
データ構造:
ここでグラフの コードの関連部分をアペンド:Lは - リスト、C実装 - 設定された初期容量を、B - - 背面から除去、Qは、キュー
編集を実装します
new Thread(new Runnable() {
@Override
public void run()
{
long time;
final int[] arr = {10, 100, 1000, 10000, 100000, 1000000};
for (int anArr : arr)
{
final List<Word> temp = new ArrayList<>();
while (temp.size() < anArr) temp.add(new Item());
final int top = (int) Math.sqrt(anArr);
final List<Word> first = new ArrayList<>();
final List<Word> second = new ArrayList<>(anArr);
...
first.addAll(temp);
second.addAll(temp);
...
SystemClock.sleep(5000);
time = System.nanoTime();
for (int i = 0; i < top; ++i) first.remove(0);
Log.d("al_l", "rem: " + (System.nanoTime() - time));
time = System.nanoTime();
for (int i = 0; i < top; ++i) second.remove(0);
Log.d("al_lc", "rem: " + (System.nanoTime() - time));
...
}
}
}).start();
今回はどのように評価しましたかは不明です。マイクロベンチマークテストですか?それはどこにある?演奏するためのコードをいくつか用意してください。 – Andremoniy