插入删除,链表真的比数组快嘛?

今天看到吧友发了个帖子,叫 想编写优美的java代码格式要记住这几条规则
其中有一条,叫做
ArrayList底层是使用数组实现的,因此随机读取数据会比LinkedList快很多,而LinkedList是使用链表实现的,新增和删除数据的速度比ArrayList快不少。


这句话当然木有问题啦,在提出帖子标题的时候,楼主也想骂自己是逗比。不过想想,似乎在日常写代码的时候,伴随“新增和删除”之前的操作,往往是“随机访问”(如果是因为我代码量少产生的错觉,各位大牛勿喷)


既然这样,那么LinkedList真比ArrayList快嘛?


换句话说,
随机访问+数组元素复制 VS 寻址+插入删除 哪个更快?
忽略掉那一个元素,也就是元素的复制和寻址,哪个更快?

package test2;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Random;

public class Array_link {

	public static void main(String[] args)
	{
		long arrListTime = 0 ;
		long linkListTime = 0 ;
		Integer[] ia1 = new Integer[1000000];
		for(int i= 0;i<1000000;i++)
		{
			ia1[i] = i;
		}
		
		Random random = new Random();
		ArrayList array = new ArrayList<Integer>(Arrays.asList(ia1));
		LinkedList link = new LinkedList<Integer>(Arrays.asList(ia1));
		
		
		for(int i=0;i<10000;i++)
		{
			int r = random.nextInt(array.size());
			
			long arrTime = System.currentTimeMillis();
			array.remove(r);
			arrListTime =arrListTime + System.currentTimeMillis() - arrTime;
			
			long linkTime = System.currentTimeMillis();
			link.remove(r);
			linkListTime =linkListTime + System.currentTimeMillis() - linkTime;
			
		}
		
	
		System.out.println("ArrayList time-consuming:"+ arrListTime);
		System.out.println("LinkedList time-consuming:"+ linkListTime);
	}
}

结果为
ArrayList time-consuming:9280
LinkedList time-consuming:40693

100W个数字里随机删除1W个数字,数组更快

1.一方面是arraycopy为本地的方法,另一方面相邻连续内存的复制要比寻址快
2.当单个元素的数据量增大,数组将显著变慢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值