数组与链表,性能到底差多少?

开发 前端
所谓数组,就是在内存中连续存储多个元素的结构,在内存中的分配也是连续的。数组中的元素通过数组下标进行访问,数组下标从0开始。

 本文转载自微信公众号「活在信息时代」,作者活在信息时代。转载本文请联系活在信息时代公众号。

同为基础的数据结构,数组与链表是最为常用的两个大类之一。

所谓数组,就是在内存中连续存储多个元素的结构,在内存中的分配也是连续的。数组中的元素通过数组下标进行访问,数组下标从0开始。

而链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。

根据两者的不同特点,我们可以看到,对于数组而言,数据是可以直接访问的,也就是说如果我想访问排序为6的数据,只需要眼看着访问地址为6的内存,就可以得到结果了。

而如果想访问链表中排序为6的数据,则需要从头开始,查找到第六个,才能获取到结果。

而插入数据的话,在数组中插入一条数据,则需要把插入之后的数据全部往后挪一遍。

而对于链表来说,插入一条数据,只需要将要插入位置的链解开,将前一节的下一个指针指向插入的节点,而将新节点的下一个指针指向原来的后一节就行了。非常简单。

那么,两者的效率空间会差多少呢?我们可以写个代码来验证一下。

我们知道,在Java中,ArrayList是基于数组实现的List,而LinkedList则是基于链表而实现的。那么,我们就可以写一段代码来测试一下他们的效率了。

插入代码如下:

数组:

List<Integer> arrayList = new ArrayList<Integer>();
long start = System.currentTimeMillis();
for (int i = 0; i< index; i++) {
arrayList.add(0, i);
}
long end = System.currentTimeMillis();
System.out.println("数组插入耗时: "+ (end - start));

链表:

Long start = System.currentTimeMillis();
List<Integer> linkedList = new LinkedList<Integer>();
for (int i =0; i< index; i ++) {
linkedList.add(0, i);
}
Long end = System.currentTimeMillis();
System.out.println("链表插入耗时: "+ (end - start));

查询代码如下:

数组:

List<Integer> arrayList = new ArrayList<Integer>();
for (int i = 0; i< index; i++) {
arrayList.add(i);
}
long start = System.currentTimeMillis();
for (int i : arrayList) {
int j = arrayList.get(i);
}
long end = System.currentTimeMillis();
System.out.println("数组查询耗时: "+ (end - start));

链表:

List<Integer> linkedList = new LinkedList<Integer>();
for (int i =0; i< index; i ++) {
linkedList.add(i);
}
Long start = System.currentTimeMillis();
for (int i : linkedList) {
linkedList.get(i);
}
Long end = System.currentTimeMillis();
System.out.println("链表查询耗时: "+ (end - start));

在将index设置为100000的情况下,结果如下:

可见差距还是很明显的。

责任编辑:武晓燕 来源: 今日头条
相关推荐

2022-07-27 14:24:38

MySQL数据库SQL

2015-08-19 11:17:02

Windows 10DirectX 12

2016-10-21 10:36:54

http2spdynode.js

2023-07-12 15:32:49

人工智能AI

2023-12-28 10:39:57

数组节点数据结构

2011-06-08 15:51:33

台式机评测

2012-06-06 10:01:04

服务器硬盘PC硬盘

2022-11-16 16:05:02

2019-03-05 14:29:34

RTX Max-Q显卡3DMark

2015-02-04 10:20:45

云技术IT战略应用架构模型

2013-01-18 09:25:48

微信移动应用YY

2020-02-07 11:07:53

数组链表单链表

2013-03-21 11:20:00

性能测试性能调优测试

2019-10-10 10:36:48

RedisQPSMySQL

2011-07-09 11:01:58

打印机评测

2019-08-14 10:20:32

算法数组链表

2019-09-19 14:47:12

人工智能AI

2024-04-17 08:35:04

Lua脚本Redis数据结构

2020-10-26 10:44:59

硬盘CPUCache

2012-06-12 10:11:20

E5服务器
点赞
收藏

51CTO技术栈公众号