对于我的工作,我已经做了一些时间表测试。
我遇到了令我感到惊讶的事情,需要帮助来理解它。

我使用了很少的数据结构作为队列,想知道如何根据项目数量快速删除。具有10个项目的arraylist从前端删除且未设置初始容量要比设置初始容量(设置为15)慢得多。为什么?以及为什么在100个项目中都一样。

图表如下:
java - 为什么初始容量对于从ArrayList中删除很重要?-LMLPHP

数据结构: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

10-02 22:16