1、简介:
数组,一种线性表数据结构,他用一组连续的内存空间,来存储一组具有相同类型的数据。官方的定义都是越看越懵逼,接下来我就用最简单的图来给大家讲解。
2、支持随机访问
数组最大的特点就是支持下标随机访问。那我们就来看看他为什么会有这个特点的。
第一是线性表。顾名思义,线性表就是数据排成像一条线一样的数据结构,每个线性表上的额数据只有前后两个顺序。如下图:
数组
第二就是连续的内存空间和相同类型的数据。相同类型的数据就可以使数组中每个数据占用一样的内存空间。而存储在连续的内存空间内,就会使这批数据的内存地址是连续存在的。我画了一个图,你可以看一下,比较好理解。
数组
我们拿一个长度为 10 的 int 类型的数组 int[] a = new int[10] 来举例。在我画的这个图中,计算机给数组 a[10],分配了一块连续内存空间 1000~1039,其中,内存块的首地址为 base_address = 1000。
所以内存地址的计算公式如下:
a[i]_address = base_address + i * data_type_size
其中data_type_size表示数组中每个元素的大小,数组中存储的是int类型的数据,所以每个data_type_size就为4个字节。所以现在我们想要下标为2元素数据。我们只需要根据公式a[2]_address = 1000 + 2 * 4 =1008 就可以找到那个数据了。
面试时经常被问到“数组与链表有什么区别?”一般回答:数组适合查询,链表适合增删。这个其实是不准确的,数组最大的特点是支持下标随机访问。
下面我提一个思考题,二维数组内存地址计算公式是什么?欢迎大家留言