插入删除,链表真的比数组快嘛?
来源:互联网 发布:大数据建设是什么 编辑:程序博客网 时间:2024/06/04 19:16
今天看到吧友发了个帖子,叫 想编写优美的java代码格式要记住这几条规则
其中有一条,叫做
ArrayList底层是使用数组实现的,因此随机读取数据会比LinkedList快很多,而LinkedList是使用链表实现的,新增和删除数据的速度比ArrayList快不少。
这句话当然木有问题啦,在提出帖子标题的时候,楼主也想骂自己是逗比。不过想想,似乎在日常写代码的时候,伴随“新增和删除”之前的操作,往往是“随机访问”(如果是因为我代码量少产生的错觉,各位大牛勿喷)
既然这样,那么LinkedList真比ArrayList快嘛?
换句话说,
随机访问+数组元素复制 VS 寻址+插入删除 哪个更快?
忽略掉那一个元素,也就是元素的复制和寻址,哪个更快?
其中有一条,叫做
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
LinkedList time-consuming:40693
100W个数字里随机删除1W个数字,数组更快
1.一方面是arraycopy为本地的方法,另一方面相邻连续内存的复制要比寻址快
2.当单个元素的数据量增大,数组将显著变慢
- 插入删除,链表真的比数组快嘛?
- 链表的随机插入不比数组快
- jdbc中PreparedStatement的预编译比Statement插入的速度快多少
- 为什么排序后的数组比没有排序过的数组运行快?
- c++实现数组的插入和删除
- 二叉数组的创建删除插入查找
- 可变数组的操作插入删除
- 可变数组的追加,插入,删除,替换
- 数组元素的插入和删除
- 为什么处理一个排序数组要比处理一个未排序的数组更快?
- 对java数组进行插入和删除比链表快很多(一)
- ACCESS的真假:一、DROP删除表再重建比Delete from Table1快吗?
- 为什么处理排序的数组要比非排序的快?(1)
- 为什么快速排序在数组的情况下比归并排序快
- 为什么插入数据普通PC比服务器更快?
- 20171203:数组拷贝、三种重要排序(冒泡、插入、快排)、二维数组的学习
- 为什么处理有序数组比无序数组快?
- 为什么处理有序数组比无序数组快?
- android之横竖屏切换
- 话说Chrome进程体系与插件管理
- A Crash Course on the Depths of Win32 Structured Exception Handling
- 简述什么是JAVA中的多态
- 用Sublime Text 3编译C源文件
- 插入删除,链表真的比数组快嘛?
- KVC 与 KVO 理解
- PHP调试技术手册V1.0.0 (PDF)
- 看看一些著名软件都是用什么语言写的
- POJ 2385 Apple Catching (DP)
- Ceph集群配置——前言
- 杂谈
- MongoDB install and use
- C语言---整型字符串转换