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

ArrayList与LinkedList在随机索引中插入项目时的对比?[副本]

段干高歌
2023-03-14

代码所做的是创建数组和链表,并为每个元素提供一个开始。然后,AddMoreItems(list vals) 将对这两个数组运行,并在数组中的某个随机索引处插入一个随机值。它将添加到每个数组的值的数量由用户的输入决定。

private static int amount = 0;

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    System.out.print("Enter amount of elements to add: ");
    amount = scan.nextInt();

    LinkedList<Integer> linked = new LinkedList<Integer>();
    ArrayList<Integer> array = new ArrayList<Integer>();

    linked.add(0);
    array.add(0);

    // Bench mark linked list speed
    long start = System.nanoTime();
    addMoreItems(linked);
    long end = System.nanoTime() - start;

    // Bench mark array list speed
    long start2 = System.nanoTime();
    addMoreItems(array);
    long end2 = System.nanoTime() - start2;

    System.out.println("Linked list took: " + (end / 1000000.0) + "ms");
    System.out.println("Array list took: " + (end2 / 1000000.0) + "ms");

}

public static void addMoreItems(List<Integer> vals) {

    Random r = new Random();

    for (int i = 0; i < amount; i++)
        vals.add(r.nextInt(vals.size()), r.nextInt());

}

因此,从根本上说,人们会认为addmoreItems()函数返回这两种列表类型所需的时间相同(可能LinkedList会稍微快一些)。但是,实际的结果似乎表明,ArrayList比链表快得多,而不管您添加的元素数量如何(您可以在这里尝试一下)。

无论如何,我的猜测是,这可能与缓存有关,而且LinkedList将为插入的每个单独元素分配内存,而ArrayList将分配内存块以减少分配次数。

共有1个答案

闻人昊昊
2023-03-14

你的期望是不正确的。ArrayListJavadoc显式地表示(部分)1

add操作以摊销常数时间运行,也就是说,添加n个元素需要O(n)个时间。所有其他操作都在线性时间内运行(粗略地说)。与LinkedList实现相比,常数因子较低。

由于常数系数较高,在LinkedList上的每个Add操作都比在ArrayList上的操作稍慢,因此您应该期望ArrayList更快。

 类似资料:
  • 本文向大家介绍java中ArrayList与LinkedList对比详情,包括了java中ArrayList与LinkedList对比详情的使用技巧和注意事项,需要的朋友参考一下  ArrayList,LinkedList都是Collection接口的通用实现方式,两者采用了不用的存储策略,用来适应不同场合的需要。 实现方式   ArrayList的内部采用集合的方式存储数据 唯一需要注意的是对于

  • 问题内容: 我正在学习Java,并且遇到了和的问题。 我有一个称为的对象,该对象具有从另一个名为的类创建的对象的数组列表。 我需要一种方法,其中返回item列表中一个对象的所有信息。 该随意选择的需求。 当我尝试编译时,出现错误,指出System.out.println行说.. 问题答案: 是一个方法,调用在你的return语句之后,因此由于无法访问而无法进行编译。 可能希望将其重写为:

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

  • 我正在创建一个gui,可以添加、删除和搜索用户输入的名称。我想知道允许我在arraylist中搜索项目的代码。非常感谢。

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