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

Java,添加时间LinkedList与ArrayList

季森
2023-03-14

正如我所知,ArrayList以2^n+1的大小复制数组。而linkedlist只更改节点

class Test1 {

public static void main(String[] args) {
    ArrayList<Integer> arrayList = new ArrayList<>();
    LinkedList<Integer> linkedList = new LinkedList<>();

    addToList(arrayList);
    System.out.println("-----------------");
    addToList(linkedList);

}

public static void addToList(List list) {
    long start = System.currentTimeMillis();
    for (int i = 0; i < 5_000_000; i++) {
        list.add(i);
    }
    long end = System.currentTimeMillis();
    System.out.println(end - start);

}

}

共有1个答案

邵旺
2023-03-14

当添加到ArrayList时,只需将整数存储在支持数组中。每隔一段时间,当支持数组填满时,您必须分配一个新数组,并将所有旧项复制到新数组中。给定500万个整数,您将不得不进行大约20次分配和复制(取决于列表的初始大小)。

若要添加到链表中,每次添加都需要:

  1. 为新的链表节点分配内存并初始化。
  2. 将新节点链接到列表末尾。
 类似资料:
  • 我的问题在我的main方法中,如何向链表中添加多个节点....我现在先从节点2和节点3开始..我以为我添加了这些节点,但是我意识到我并没有对这些节点和它们的值做任何事情,对吗?如何使用setData()和setNext()来添加所有这些节点?这有意义吗? 如果上面设置了值,如何将它们全部添加? 然后,我需要为每一项设置数据和下一步吗?(这似乎是多余的,因为我似乎在上面的构造函数中设置了每个节点的值

  • 公共类插入节点{ } 您好,代码在LinkedList add head和add last的实现之上。但是,当我运行代码时,我可以添加新节点作为链表上的最后一个节点,但我不能将新节点添加到链表的请求中。 运行此代码时,输出为: 加数法有效,但为什么不加前置呢?

  • 问题内容: 在我的表我有,列。 示例:和 如何将此列添加到我的列中,这样我就可以 我尝试了这个: 但它不起作用。 谢谢你,史蒂夫 问题答案: 据我了解,您想将前两位数字添加为小时,将后两位数字添加为分钟-但您并未在通话中执行此操作- 您要将两个部分都添加为-请尝试以下操作: 在这里,我使用了两个嵌套-内部添加小时,外部添加分钟到添加小时的结果上。 另外:在SQL Server中是 基于1的 ,例如

  • 我正在尝试在单链表的末尾插入一个新节点。但编译后我一直得到NullPointerException。 下面是Node类。 下面是单个LL类 方法addFirst()起作用。当我试图通过addLast()创建LL时,会出现NullPointerException。我认为一定有问题,但我想不出来。

  • 我正在尝试在单个链表的末尾插入一个新节点。但是我在编译后不断得到空点例外。 下面是节点类。 这里是单个LL类 addFirst()方法有效。当我试图通过addLast()创建一个LL时,出现了NullPointerException。我想< code > if(size = = 0){ head = new node;一定有什么问题;},但是我想不通。

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