Java ArrayList 与 LinkedList的区别

本文详细对比了ArrayList与LinkedList两种数据结构在不同操作场景下的性能表现,包括新增、删除、随机访问等关键操作,并通过具体实验数据说明了它们各自的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

ArrayList和LinkedList的大致区别: 

     1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
     2.对于随机访问get和set,ArrayList速度优于LinkedList,因为LinkedList要移动指针。 
     3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

    补充:List.add(index,Object),例如list.add(0,new Object()),对于Arraylist需要移动数据。如果是List.add(new Object()),ArrayList与LinkedArray速度差别不大。

List.add(new Object()):

    static final int N = 50000;
	public static long timeList(List list){
		long start = System.currentTimeMillis();
		Object obj = new Object();
		for(int i=0;i<N;i++){
			/**注意该处的区别**/
			list.add(obj);
		}
		
		return System.currentTimeMillis()-start;
	}

执行如下的代码:     

  System.out.println(timeList(new ArrayList()));  ------------> 5
  System.out.println(timeList(new LinkedList()));------------> 4

List.add(0,new Object()):

    static final int N = 50000;
	public static long timeList(List list){
		long start = System.currentTimeMillis();
		Object obj = new Object();
		for(int i=0;i<N;i++){
			/**注意该处的区别**/
			list.add(0,obj);
		}
		
		return System.currentTimeMillis()-start;
	}

执行如下的代码:     

  System.out.println(timeList(new ArrayList()));  ------------> 214
  System.out.println(timeList(new LinkedList()));------------> 5

 

对于随机的get()和set():

	
    static final int N = 50000;
    public static List addList(List list){
		Object obj = new Object();
		for(int i=0;i<N;i++){
			list.add(obj);
		}
		return list;
	}

	public static long readList(List list){
        //获取纳秒
		long start = System.nanoTime();
		list.set(20000, new Object());
		list.get(20000);
		return System.nanoTime()-start;
	}

执行如下代码:

       List list1 = addList(new ArrayList());
        List list2 = addList(new LinkedList());
        System.out.println(readList(list1));   ————————》19358
        System.out.println(readList(list2));  ————————》790914

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值