对于我的工作,我对时间表做了一些测试。 我遇到了一些令我惊讶的事情,需要帮助来理解它。
我使用了很少的数据结构作为队列,并且想知道根据项目数量删除的速度如何。而具有 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();
最佳答案
阅读这篇关于 Avoiding Benchmarking Pitfalls on the JVM 的文章。它解释了 Hotspot VM 对测试结果的影响。如果你不关心它,你的测量就不正确。正如您通过自己的测试发现的那样。
如果您想做可靠的基准测试,请使用 JMH .
关于java - 为什么初始容量对于从 ArrayList 中删除很重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36986192/