ArrayList和LinkedList add和remove方法的比较

    xiaoxiao2021-04-05  33

    ArrayList 是一种可增长的数组的实现。 使用ArrayList的优点在于 对 get和set的调用是花费常数时间。缺点就是有新的项插入,和现有的项删除代价昂贵,除非变动是 在ArrayList的末端进行。

    使用LinkedList的优点在于新的项的插入和现有的项的删除开销很小。这意味着在表的前端进行添加和删除都是常数时间的操作 ,因此LinkedList提供了addFirst,removeFirst,addLast,removeLast,以及getFirst和getLast等都有效的添加删除和访问。缺点 就在于它不容易作索引的,所以get的调用是昂贵的,除非非常接近表的两端。 下面就分别使用add和remove操作来看这两种集合有何差异。

    先来看add方法。

    package com.songwenjin.list; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class TestList { public static void makeList1(List<Integer> lst,int N){ lst.clear(); long start=System.currentTimeMillis(); for(int i=0;i<N;i++){ lst.add(i); } long end=System.currentTimeMillis(); System.out.println("向表的末端添加"+N+"条花费的时间="+(end-start)+"毫秒"); } //向表的末端添加数据 public static void main(String[] args) { int N1=500000; int N2=1000000; List<Integer> arrayList=new ArrayList<Integer>(); List<Integer> linkedList=new LinkedList<Integer>(); makeList1(arrayList,N1); makeList1(arrayList,N2); makeList1(linkedList,N1); makeList1(linkedList,N2); } } 打印结果如下

    向表的末端添加500000条花费的时间=14毫秒 向表的末端添加1000000条花费的时间=39毫秒 向表的末端添加500000条花费的时间=16毫秒 向表的末端添加1000000条花费的时间=24毫秒 可以看到 不管是ArrayLisst(忽略动态扩容)还是LinkedList作为参数进行传递,运行时间都是O(n),就是说是常数的。因为add每次调用都是在表的末端进行从而花费的是常数时间(忽略ArrayList的动态扩容)。

    转载请注明原文地址: https://ju.6miu.com/read-666276.html

    最新回复(0)