数组的定义
数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。首先是线性表(Linear List)。顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。
数组的存储
n维数组的定义
下标由n个数组成的数组称为n维数组。
// 一维数组
int[] a = new int[10];
// 二维数组 (面)
int[][] a = new int[2][3];
// 三维数组 (体) 类比: 书(体) [2.页码 3.行 4.列]
int[][][] a = new int[2][3][4];
一维数组a[n]
个元素按下角标一次存放,例如:int[] a = new int[5];
二维数组a[m][n]
二维数组每一行由n列,所以每过一行存储空间地址变化是: i * n * c,i代表目标值存储在第几行,n代表一行有多少列,因为需要跨行,例如: int[][] a = new int[2][3];
插入数据
数组是使用连续的内存空间来存储数据的,所以数组的最大的特点就是支持根据下标随机访问数据,这是数组最大的优势。但是,有利就有弊,虽然数组高效的支持下标访问,只不过在插入和删除数据的时候就比较低效了,为了保证内存的连续性,必须要进行数据搬移。
假如有一个数组 [3, 4, 6, 8, 7, 2, 5],第一种情况是插入的元素位于数组的最后一个位置,那么不用进行数据搬移,时间复杂度为 O(1) ,如果插入的位置是第一个,那么必须移动整个数组,时间复杂度为 O(n) 。
删除数据
假如有一个数组 [3, 4, 6, 8, 7, 2, 5],如果删除的是最后一个元素,那么不需要进行数据搬移,如果删除的是第一个元素,那么数组每一个元素都会向前移动一位。