对于我的工作,我已经做了一些时间表测试。
我遇到了令我感到惊讶的事情,需要帮助来理解它。
我使用了很少的数据结构作为队列,想知道如何根据项目数量快速删除。具有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。