这是1千万条数据的时候,要是到1亿条,LinkedList直接报错了.
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
难道现在ArrayList性能以及这么吊了?以前一直以为是LinkedList消耗的时间少.
谁能指点下......
两个使用场景不一样啊,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操作更占内存。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。