`

比较一下ArrayList和LinkedList:

阅读更多
一般大家都知道ArrayList和LinkedList的大致区别:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
    这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。  这一点我做了实验。在分别有200000条“记录”的ArrayList和LinkedList的首位插入20000条数据,LinkedList耗时约是ArrayList的20分之1。
for(int m=0;m<20000;m++)...{
        linkedlist.add(m,
null);      //当在200000条数据之前插入20000条数据时,LinkedList只用了1125多ms.这就是LinkedList的优势所在
        }

        
long time4 = new Dte().getTime();
        System.out.print(
"batch linkedlist add:");
        System.out.println(time4 
- time3);
        
for(int n=0;n<20000;n++)...{
        arraylist.add(n, 
null);  //当在200000条数据之前插入20000条数据时,ArrayList用了18375多ms.时间花费是arraylist的近20倍(视测试时机器性能)
        }

        
long time5 = new Date().getTime();
        System.out.print(
"batch arraylist add:");
        System.out.println(time5 
- time4);


4.查找操作indexOf,lastIndexOf,contains等,两者差不多。
5.随机查找指定节点的操作get,ArrayList速度要快于LinkedList.
这里只是理论上分析,事实上也不一定,ArrayList在末尾插入和删除数据的话,速度反而比LinkedList要快。我做过一个插入和删除200000条数据的试验。

        long time1 = new Date().getTime();
        String s1 
= (String) linkedlist.get(100000);//  总记录200000,linkedlist加载第100000条数据耗时15~32ms不等
        long time2 = new Date().getTime();
        System.out.println(time2 
- time1);
        String s2 
= (String) arraylist.get(100000);//  总记录200000,linkedlist加载第100000条数据耗时0ms
        long time3 = new Date().getTime();
        System.out.println(time3 
- time2);

 

    /**//*分别insert200000条数据到linkedlist和arraylist
    *由于是在末尾插入数据,arraylist的速度比linkedlist的速度反而要快 
    
*/

    
public static void insertList(LinkedList linklist, ArrayList arraylist) ...{
        
long time1 = new Date().getTime();
        System.out.println(time1);
        
for (int i = 0; i < 200000; i++...{
            linklist.add(i, 
"linklist" + i);
        }

        
long time2 = new Date().getTime();
        System.out.println(time2 
- time1);
        
for (int j = 0; j < 200000; j++...{
            arraylist.add(j, 
"arraylist" + j);
        }

        
long time3 = new Date().getTime();
        System.out.println(time3 
- time2);
    }



/**//*delete linkedlist和arraylist中的200000条数据
    *由于是在末尾删除数据,arraylist的速度比linkedlist的速度反而要快 
    
*/

    
public static void deleteList(LinkedList linklist, ArrayList arraylist) ...{
        
long time1 = new Date().getTime();
        System.out.println(time1);
        
for (int i = 199999; i >= 0; i--...{
            linklist.remove(i);
        }

        
long time2 = new Date().getTime();
        System.out.println(time2 
- time1);
        
for (int j = 199999; j >= 0; j--...{
            arraylist.remove(j);
        }

        
long time3 = new Date().getTime();
        System.out.println(time3 
- time2);
    }


    
public static void main(String args[]) ...{
        LinkedList linkedlist 
= new LinkedList();
        ArrayList arraylist 
= new ArrayList();
        insertList(linkedlist, arraylist);

                                        
//以下代码省略

插入:
LinkedList 578ms
ArrayList 437ms
删除:
LinkedList 31ms
ArrayList 16ms

分享到:
评论
3 楼 davidtps 2012-02-26  
   学习了
2 楼 mousepc 2011-06-22  
不错的文章,谢谢!
1 楼 pangtao 2010-02-28  
分析的很到位,谢谢

相关推荐

    ArrayList和Linkedlist1

    在IT领域,特别是Java编程中,ArrayList和LinkedList是两种非常重要的数据结构,它们都是List接口的实现类。理解这两者的区别对于优化程序性能至关重要。面试官询问这些知识点,旨在评估应聘者的理论基础和实践能力...

    测试ArrayList和LinkedList的add方法

    测试ArrayList和LinkedList的add方法

    Java中ArrayList和LinkedList区别 时间复杂度 与空间复杂度1

    在 Java 中,ArrayList 和 LinkedList 是两种常用的集合类,它们各自具有不同的特性和适用场景,主要体现在数据结构、访问效率和操作性能上。 1. 数据结构: - ArrayList 实现了一个动态数组,它内部是一个 Object...

    【Java面试题】ArrayList和LinkedList区别

    【Java面试题】ArrayList和LinkedList区别

    关于arraylist和linkedList的区别

    ### 关于ArrayList与LinkedList的区别 在Java编程语言中,`ArrayList`与`...综上所述,在选择使用`ArrayList`还是`LinkedList`时,需要根据具体的使用场景和需求来决定,以便在内存占用、操作速度等方面达到最佳平衡。

    ArrayList-LinkedList:ArrayList和LinkedList的完整演示

    在Java编程语言中,ArrayList和LinkedList是两种常用的集合类,它们都实现了List接口,用于存储和操作有序的数据序列。这两个类各有特点,适用于不同的场景。本文将深入探讨ArrayList和LinkedList的内部实现、性能...

    ArrayList LinkedList Vector区别

    ArrayList 和 LinkedList 都可以用于实现堆栈、队列或双向队列等数据结构。 Collection 接口是 Java 中最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素(Elements)。Collection 接口...

    比较ArrayList、LinkedList、Vector1

    List接口的实现类主要有ArrayList、LinkedList和Vector。 2. **ArrayList** - **实现原理**:ArrayList基于动态数组实现,它提供快速的按索引访问,因为数组支持直接通过索引获取元素。 - **添加和删除**:对于在...

    ArrayList LinkedList Vector性能测试

    2. LinkedList: LinkedList是基于双向链表实现的列表,每个节点包含数据和两个引用,分别指向前后节点。LinkedList在插入和删除操作时具有优势,因为它只需要改变相邻节点的引用即可,而无需移动元素。然而,对于...

    ArrayList LinkedList Vector性能对比

    ArrayList、LinkedList和Vector是三种常见的动态数组实现,它们各自有特定的特性和使用场景。这里我们将深入探讨这三个类的性能对比,以及它们在不同操作下的表现。 ArrayList是基于动态数组实现的,它提供了随机...

    Java中ArrayList和LinkedList区别

    在Java编程语言中,ArrayList和LinkedList都是集合框架中两种重要的列表实现,它们分别基于不同的数据结构,具有不同的特性和性能特点。以下是对这两个类的详细分析: 1. 数据结构: - ArrayList是基于动态数组的...

    05丨ArrayList还是LinkedList?使用不当性能差千倍.html

    05丨ArrayList还是LinkedList?使用不当性能差千倍.html

    当面试官问我ArrayList和LinkedList哪个更占空间时,我这么答让他眼前一亮

    今天,我们将深入探讨这两个集合类的实现原理和比较。 ArrayList 的实现原理 ArrayList 是基于数组实现的,它的底层存储结构是一个数组,用于装载数据。ArrayList 的默认容量是 10,但是这只是数组的容量大小,而...

    对ArrayList和LinkedList底层实现原理详解

    ArrayList 和 LinkedList 的比较: 1. 内存占用:ArrayList 占用内存少于 LinkedList,因为 ArrayList 是基于数组实现的,而 LinkedList 是基于链表实现的。 2. 查询效率:ArrayList 的查询效率高于 LinkedList,...

    arraylist-linkedlist-test.zip

    ArrayList和LinkedList是Java集合框架中两种重要的动态数组实现,它们都是List接口的实现类,但它们在存储和操作数据方面有着显著的区别。本文件"arraylist-linkedlist-test.zip"主要探讨了在执行添加和删除元素操作...

    ArrayList-LinkedList-源码.rar

    在Java编程中,ArrayList和LinkedList是两种常见的动态数组,它们都是Java集合框架的一部分,提供了对元素存储和操作的功能。本篇将深入探讨ArrayList和LinkedList的内部实现机制,通过源码分析来揭示它们在性能、...

    合理运用ArrayList与LinkedList

    第二个代码示例则比较了从ArrayList和LinkedList中读取100000个元素的时间。在ArrayList中,由于元素存储连续,直接按索引访问几乎瞬间完成。然而,当使用LinkedList时,由于需要从头开始遍历链表,耗时显著增加。 ...

    10.ArrayList 和LinkedList的区别.avi

    10.ArrayList 和LinkedList的区别.avi

    ArrayList 和LinkedList各自的特点是什么

    通过对比`ArrayList`和`LinkedList`,我们可以看到两种集合类各有优势: - **`ArrayList`**:适用于需要频繁进行随机访问且对插入删除操作次数较少的场景。例如,在处理大量数据并经常需要根据索引进行查询的情况下...

    Arraylist与LinkedList区别

    2,随机访问的时候,ArrayList的效率比较高,因为LinkedList要移动指针,而ArrayList是基于 3,索引(index)的数据结构,可以直接映射到。 4,插入、删除数据时,LinkedList的效率比较高,因为ArrayList要移动数据。 ...

Global site tag (gtag.js) - Google Analytics