开发者社区> 问答> 正文

关于ArrayList 与 LinkedList 性能问题?报错

这是1千万条数据的时候,要是到1亿条,LinkedList直接报错了.

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space


难道现在ArrayList性能以及这么吊了?以前一直以为是LinkedList消耗的时间少.

谁能指点下......


展开
收起
爱吃鱼的程序员 2020-06-09 14:10:47 507 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    两个使用场景不一样啊,LinkedList有着优秀的迭代速度,但随机获取肯定没有ArrayList好回复<aclass='referer'target='_blank'>@小小丁灬:add和get并不是LinkedList长处,你可以测试下迭代器遍历的性能两个都是add方法,没有用get方法LinkedList有一个内置的Node,ArrayList单纯的数组操作
    LinkedList每个节点都有一个node的对象,消耗内存很大

    arraylist是linux封装的俩字nb

    你只弄插入可是不行的。既然是测试链表和顺序表,在不断随机删除的时候,链表效果就很明显了数据结构没学好这是当然的了。linkedList会在每次添加会建立Node对象。试想,你建立了一千万个不能垃圾回收的对象。heapspace肯定会溢出。<preclass="brush:java;toolbar:true;auto-links:false;">packagecom.mangocity.test;importjava.util.*;publicclassListDemo{staticfinalintN=50000;staticlongtimeList(Listlist){longstart=System.currentTimeMillis();Objecto=newObject();for(inti=0;i<N;i++)list.add(0,o);returnSystem.currentTimeMillis()-start;}publicstaticvoidmain(String[]args){System.out.println("ArrayList耗时:"+timeList(newArrayList()));System.out.println("LinkedList耗时:"+timeList(newLinkedList()));}}


    这时我的输出结果是:ArrayList耗时:2463LinkedList耗时:15 当一个元素被加到ArrayList的最开端时,所有已经存在的元素都会后移,这就意味着数据移动和复制上的开销。相反的,将一个元素加到LinkedList的最开端只是简单的未这个元素分配一个记录,然后调整两个连接。在LinkedList的开端增加一个元素的开销是固定的,而在ArrayList的开端增加一个元素的开销是与ArrayList的大小成比例的。




    没有意义

    首先ArrayList的add方法是在最后追加,即add操作为O(1),LinkedList是的add也是在最后追加O(1).

    期次linkedList是每次会创建Node,而ArrayList是变成数组,即LinkedList单纯add操作更占内存。


    2020-06-09 15:31:40
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载