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

Java::LinkedList的插入速度真的比ArrayList快吗?[副本]

尉迟京
2023-03-14

下面是我的测试代码:

List<String> strLnkdList = new LinkedList<String>();

long start1 = System.currentTimeMillis();
for(int i=0;i<10000;i++){
    strLnkdList.add("Test"+i);
}
long end1 = System.currentTimeMillis();
System.out.println("LinkedList Time in millis: " + (end1-start1));

List<String> strArrayList = new ArrayList<String>(10);

start1 = System.currentTimeMillis();
for(int i=0;i<10000;i++){
    strArrayList.add("Test"+i);
}

end1 = System.currentTimeMillis();
System.out.println("ArrayList Time in millis: " + (end1-start1));

产出:

LinkedList Time in millis: 22
ArrayList Time in millis: 10

共有1个答案

班昱
2023-03-14

链表只需要更改将要删除的节点的两个邻居节点(元素)中的指针位置。

ArrayList所有元素都需要移位,以填充被移除的元素所创建的空间。

有些人想像一个延加塔的阵列,使它缩短1个街区,你必须把它拉出来,然后把每个街区向下移动1

 类似资料:
  • -和有什么区别?什么时候使用更好? 我想每个Java开发人员至少在面试中听过一次这个问题。 -如果您希望能够在列表中间插入项目,则首选链表。 从这里 忘了提到插入费用。在LinkedList中,一旦有了正确的位置,插入将花费,而在ArrayList中,插入将上升到-所有超过插入点的元素都必须移动。 从这里 还有更多... 但你有没有尝试过自己复制它?我昨天试了一下,得到了这些结果: 产出: 哦,A

  • 我想知道Hashmap和ArrayList中的搜索元素有什么比较吗?我遇到的情况如下:我将有少量的元素(通常4-6个,最多10个)。我有这样一个元素的整数id,我将得到很多调用,这些调用将使用Id搜索元素并在这个元素上执行一些方法。这看起来是hashmap的一个很好的用例,但是我开始怀疑像ArrayList这样的线性集合在这里会不会更好。例如因为CPU缓存。为了在地图上使用搜索,我需要自动装箱来从

  • 代码所做的是创建数组和链表,并为每个元素提供一个开始。然后,将对这两个数组运行,并在数组中的某个随机索引处插入一个随机值。它将添加到每个数组的值的数量由用户的输入决定。 因此,从根本上说,人们会认为函数返回这两种列表类型所需的时间相同(可能会稍微快一些)。但是,实际的结果似乎表明,比链表快得多,而不管您添加的元素数量如何(您可以在这里尝试一下)。 无论如何,我的猜测是,这可能与缓存有关,而且将为插

  • 我正在尝试将ArrayList转换为Treemap,所以我编写了一个比较各种方法的基准: 1)并行流中的toMap 2)toMap在流中 3)流中forEach 主 大小为10_000的输出如下 “for loop”与预期一样是最慢的 回到正题,为什么当arraylist列表很大时,for each in parallel steam会失败? 运行i7 2670QM,因此线程池大小应为8

  • 我了解到是作为双链表实现的,它在添加和删除上的性能比好,但在get和set方法上的性能更差。 这是否意味着我应该选择而不是来插入? 我写了一个小测试,发现插入速度更快,那么链表怎么比快呢? 请参考下面我所做的例子。

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