插入删除,链表真的比数组快嘛?
今天看到吧友发了个帖子,叫 想编写优美的java代码格式要记住这几条规则
其中有一条,叫做
ArrayList底层是使用数组实现的,因此随机读取数据会比LinkedList快很多,而LinkedList是使用链表实现的,新增和删除数据的速度比ArrayList快不少。
这句话当然木有问题啦,在提出帖子标题的时候,楼主也想骂自己是逗比。不过想想,似乎在日常写代码的时候,伴随“新增和删除”之前的操作,往往是“随机访问”(如果是因为我代码量少产生的错觉,各位大牛勿喷)
既然这样,那么LinkedList真比ArrayList快嘛?
换句话说,
随机访问+数组元素复制 VS 寻址+插入删除 哪个更快?
忽略掉那一个元素,也就是元素的复制和寻址,哪个更快?
结果为 ArrayList time-consuming:9280
LinkedList time-consuming:40693
100W个数字里随机删除1W个数字,数组更快
1.一方面是arraycopy为本地的方法,另一方面相邻连续内存的复制要比寻址快 2.当单个元素的数据量增大,数组将显著变慢
其中有一条,叫做
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.当单个元素的数据量增大,数组将显著变慢
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: php实现短链接系统
- 下一篇: TP关闭调试模式后报错