arraylist与linkedlist的区别与性能测试

/**
*arraylist和linkedlist的适用场合。
**/
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Date;
public class Demo2{
    public static void main(String[]aa){
        switch (aa[0]){
            case "0":arrylistInset();break;
            case "1":linkedlistInset();break;
            case "2":arrylistGet();break;
            case "3":linkedlistGet();break;
        }
        
    }
    public static void arrylistInset(){    //967ms
        List<Integer> list = new ArrayList<Integer> ();
        
        for(int i=0;i<5000;i++){//创建数据表
            for(int j=1;j<1000;j++){
                list.add(i+j);
            }
        }
        Long begin = new Date().getTime();
        for(int i=3;i<1000;i+=3){//插入数据
            list.add(i,i);
        }
        Long end = new Date().getTime();
        System.out.println("cost : " + (end - begin)+ " ms");
        System.out.println("number:" + list.size());
    }
    public static void linkedlistInset(){    //15ms
        List<Integer> list = new LinkedList<Integer> ();
        
        for(int i=0;i<5000;i++){//创建数据
            for(int j=1;j<1000;j++){
                list.add(i+j);
            }
        }
        Long begin = new Date().getTime();
        for(int i=3;i<1000;i+=3){//插入数据
            list.add(i,i);
        }
        Long end = new Date().getTime();
        System.out.println("cost : " + (end - begin)+ " ms");
        System.out.println("number:" + list.size());
    }
    public static void arrylistGet(){    //get 1w条数据花费时间:0ms
                                        //      10w条:0ms;
        List<Integer> list = new ArrayList<Integer> ();
        
        for(int i=0;i<5000;i++){//创建数据表
            for(int j=1;j<1000;j++){
                list.add(i+j);
            }
        }
        Long begin = new Date().getTime();
        for(int i=3;i<50000;i++){//插入数据
            list.get(i);
        }
        Long end = new Date().getTime();
        System.out.println("cost : " + (end - begin)+ " ms");
        System.out.println("number:" + list.size());
    }
    public static void linkedlistGet(){    //get 1w条数据花费时间:219ms
                                        //      10w条:6616ms;
        List<Integer> list = new LinkedList<Integer> ();
        
        for(int i=0;i<5000;i++){//创建数据
            for(int j=1;j<1000;j++){
                list.add(j);
            }
        }
        Long begin = new Date().getTime();
        for(int i=3;i<50000;i++){//插入数据
            list.get(i);
        }
        Long end = new Date().getTime();
        System.out.println("cost : " + (end - begin)+ " ms");
        System.out.println("number:" + list.size());
    }
}
/**
*总结:
*1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
*2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
*3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据
**/
原文地址:https://www.cnblogs.com/-ROCKS/p/5859076.html