关于ArrayList 与 LinkedList 性能问题

小小丁灬 发布于 2016/06/03 11:17
阅读 590
收藏 1

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

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


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

谁能指点下......


加载中
0
景愿
景愿
两个使用场景不一样啊,LinkedList有着优秀的迭代速度,但随机获取肯定没有ArrayList好
景愿
景愿
回复 @小小丁灬 : add和get并不是LinkedList长处,你可以测试下迭代器遍历的性能
小小丁灬
两个都是add方法,没有用get方法
0
空无一长物
LinkedList有一个内置的Node,ArrayList单纯的数组操作
0
沧海_Sea
沧海_Sea
LinkedList每个节点都有一个node的对象,消耗内存很大
0
飞翔的大骆驼
飞翔的大骆驼

arraylist 是linux封装的 俩字 nb

0
xpbob
xpbob
你只弄插入可是不行的。既然是测试链表和顺序表,在不断随机删除的时候,链表效果就很明显了
0
LucEsape
LucEsape
数据结构没学好
0
猫不贰
猫不贰
这是当然的了。linkedList会在每次添加会建立Node对象。试想,你建立了一千万个不能垃圾回收的对象。heap space肯定会溢出。
0
szwx855
szwx855
package com.mangocity.test;   
  
import java.util.*;   
public class ListDemo {   
     static final int N=50000;   
     static long timeList(List list){   
     long start=System.currentTimeMillis();   
     Object o = new Object();   
     for(int i=0;i<N;i++)   
         list.add(0, o);   
     return System.currentTimeMillis()-start;   
     }   
     public static void main(String[] args) {   
         System.out.println("ArrayList耗时:"+timeList(new ArrayList()));   
         System.out.println("LinkedList耗时:"+timeList(new LinkedList()));   
     }   
}


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




0
12叔
12叔
没有意义
0
温安适
温安适

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

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


返回顶部
顶部