当前位置: 首页 > 知识库问答 >
问题:

ArrayList和LinkedList哪个运行得更快?[副本]

卓致远
2023-03-14
List li = new LinkedList();

for (int i = 0; i < 100; i++) {
    li.add(i);
}

long start1 = System.nanoTime();
li.get(57);

long end1 = System.nanoTime();
long diff1 = end1-start1;

System.out.println("Time taken by LinkedList = "+diff1);

List al = new ArrayList();
for (int i = 0; i < 100; i++) {
    al.add(i);
}

共有1个答案

厍光霁
2023-03-14

如果必须执行大量插入和不太频繁的查找,请使用LinkedList。如果执行的查找多于插入,请使用ArrayList

原因如下--ArrayList由具有初始容量的数组支持。因此,如果您一直在列表中插入项,它将不得不重新调整其数组容量以容纳新插入的项,如果执行索引-spcific插入,它可能还必须转移现有的项。另一方面,LinkedList由链表支持,在链表中创建项总是在一个恒定的时间内执行--创建一个项并将其分配到列表的末尾。这里没有重新调整。

现在,要从ArrayList中获取一个项,总是需要一定的时间,因为它可以很容易地在一定的时间内索引支持数组。但是,从LinkedList中获取项可能会导致您遍历整个链表以查找项节点。因此,在本例中,它的执行不如ArrayList

List<Integer> li = new LinkedList<Integer>();
for (int i = 0; i < 100; i++) {
    li.add(i);
}

long start1 = System.nanoTime();
li.get(57);

long end1 = System.nanoTime();
long diff1 = end1 - start1;

System.out.println("Time taken by LinkedList = "+diff1);

List<Integer> al = new ArrayList<Integer>();
for (int i = 0; i < 100; i++) {
    al.add(i);
}
 类似资料:
  • 问题内容: 我了解这是作为双重链接列表实现的。它在add和remove上的性能优于,但在get和set方法上却较差。 这是否意味着我应该选择在插入? 我写了一个小测试,发现插入速度更快。那如何链表比? 请参考下面的示例。 问题答案: Linkedlist确实在插入时速度更快,问题出在您的示例中。在您的代码中,您一直都需要附加到末尾。对于ArrayList,它与LinkedList一样容易。您应该做

  • 主要内容:1 ArrayList和LinkedList的区别,2 Java ArrayList和LinkedList的例子1 ArrayList和LinkedList的区别 ArrayList和LinkedList都实现List接口并维护插入顺序。两者都是非同步(线程不安全)类。 下面列出了ArrayList和LinkedList类之间的区别。 ArrayList LinkedList ArrayList在内部使用动态数组存储元素。 LinkedList在内部使用双向链表来存储元素。 使用Arr

  • 问题内容: 我在此之前的一篇帖子中写道: 对于LinkedList 得到的是O(n) 加为O(1) 删除为O(n) Iterator.remove为O(1) 对于ArrayList 得到的是O(1) add为O(1)摊销,但O(n)为最差情况,因为必须调整数组大小并复制 删除为O(n) 因此,通过查看此内容,我得出的结论是,如果只对我的集合中的序列插入(比如说5000000个元素),它将超出类别。

  • 在测试了大约100亿次之后,如果比AMD64的快0.1纳秒,那么似乎更快,但我不太明白。下面代码中的地址本身不是一个直接值吗? 计量代码为:

  • 问题内容: 我正在尝试优化将数据插入MySQL的代码的一部分。我应该将INSERT链接起来以制作一个巨大的多行INSERT还是更快地使用多个单独的INSERT? 问题答案: https://dev.mysql.com/doc/refman/8.0/zh-CN/insert- optimization.html 插入行所需的时间由以下因素决定,其中数字表示近似比例: 连接:(3) 向服务器发送查询: