Java 中 LinkedList 和 ArrayList 的区别

引自:https://www.cnblogs.com/huzi007/p/5550440.htmlhtml

 

ArrayList和LinkedList的大体区别以下:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
2.对于随机访问get和set,ArrayList以为优于LinkedList,由于LinkedList要移动指针。 
3.对于新增和删除操做add和remove,LinedList比较占优点,由于ArrayList要移动数据。 数组

 

上代码:数据结构

复制代码
 1     static final int N=50000;
 2     static long timeList(List list){
 3         long start=System.currentTimeMillis();
 4         Object o = new Object();
 5         for(int i=0;i<N;i++) {
 6             list.add(0, o);
 7         }
 8         return System.currentTimeMillis()-start;
 9     }
10     static long readList(List list){
11         long start=System.currentTimeMillis();
12         for(int i=0,j=list.size();i<j;i++){
13 
14         }
15         return System.currentTimeMillis()-start;
16     }
17 
18     static List addList(List list){
19         Object o = new Object();
20         for(int i=0;i<N;i++) {
21             list.add(0, o);
22         }
23         return list;
24     }
25     public static void main(String[] args) {
26         System.out.println("ArrayList添加"+N+"条耗时:"+timeList(new ArrayList()));
27         System.out.println("LinkedList添加"+N+"条耗时:"+timeList(new LinkedList()));
28 
29         List list1=addList(new ArrayList<>());
30         List list2=addList(new LinkedList<>());
31         System.out.println("ArrayList查找"+N+"条耗时:"+readList(list1));
32         System.out.println("LinkedList查找"+N+"条耗时:"+timeList(list2));
33     }
复制代码

当咱们在集合中装5万条数据,测试运行结果以下:测试

显然咱们能够看出ArrayList更适合读取数据,linkedList更多的时候添加或删除数据。spa

 

ArrayList内部是使用可増长数组实现的,因此是用get和set方法是花费常数时间的,可是若是插入元素和删除元素,除非插入和删除的位置都在表末尾,不然代码开销会很大,由于里面须要数组的移动。
LinkedList是使用双链表实现的,因此get会很是消耗资源,除非位置离头部很近。可是插入和删除元素花费常数时间。指针

相关文章
相关标签/搜索