1、什么是数组
数组对应的英文是 array,是有限个相同类型的变量所组成的有序集合,数组中 的每一个变量被称为元素。数组是最为简单、最为常用的数据结构;以整型数组为例,数组的存储形式如下图所示:
数组中的每一个元素有着自己的下标,只不过这个下标从0开始,一直到数组长度-1;数组的另一个特点,是在内存中顺序存储,因此可以很好地实现逻辑上的顺序表。
数组在内存中的顺序存储:内存是由一个个连续的内存单元组成的,每一个内存单元都有自己的地址。在 这些内存单元中,有些被其他数据占用了,有些是空闲的;
数组中的每一个元素,都存储在小小的内存单元中,并且元素之间紧密排列, 既不能打乱元素的存储顺序,也不能跳过某个存储单元进行存储。
如图,橙色的格子代表空闲的存储单元,灰色的格子代表已占用的存储单元,而红色的连续格子代表数组在内存中的位置。不同类型的数组,每个元素所占的字节个数也不同。
2、数组的基本操作
【1】读取元素
对于数组来说,读取元素是最简单的操作。由于数组在内存中顺序存储,所以只要给出一个数组下标,就可以读取到对应的数组元素。
假设有一个名称为array的数组,要读取数组下标为3的元素,就写作 array[3];读取数组下标为5的元素,就写作array[5]。需要注意的是,输入的下 标必须在数组的长度范围之内,否则会出现数组越界,像这种根据下标读取元素的方式叫作 随机读取,简单的代码示例如下:
int[] array = new int[]{
3,1,2,5,4,9,7,2};
// 输出数组中下标为3的元素
System.out.println(array[3]);
【2】 更新元素
要把数组中某一个元素的值替换为一个新值,直接利用数组下标就可以把新值赋给该元素,代码示例如下:
int[] array = new int[]{
3,1,2,5,4,9,7,2};
// 给数组下标为5的元素赋值
array[5] = 10;
// 输出数组中下标为5的元素
System.out.println(array[5]);
数组读取元素和更新元素的时间复杂度都是O(1)
【3】 插入元素
数组的实际 元素数量有可能小于数组的长度,例如下面的情形:
因此,插入数组元素的操作存在3种情况:
- 尾部插入
尾部插入,是最简单的情况,直接把插入的元素放在数组尾部的空闲位置即可,等同于更新元素的操作
- 中间插入
由于数组的每一个元素都有其固定下标,所以不得不首先把插入位置及后面的元素向后移动,腾出地方,再把要插入的元素放到对应的数组位置上;