因为写算法题经常会用到数组,而且刚开始因为使用不太熟悉,经常会出错而且有时候还不知道为什么会出错,因为在这里总结一下。
- 数组?
数组用来顺序存储一系列数据,且每一项都需具有相同的类型(基本数据类型、类或者相同的父类)。
- 数组的创建和初始化
在Java中,创建数组需要以下三个步骤:
- 声明数组的名字和类型
- 创建数组(需要指定数组的长度)
- 初始化数组元素
实际执行过程中,可以分步执行,也可以一步到位,常用的三种创建数组的方式如下:
- 完整模式
int[] intArray; //声明数组名字(intArray)和类型(int)
intArray = new int[N]; //用new创建数组,长度为N
for(int i=0; i<N-1; i++) //for循环初始化数组元素
intArray[i] = 10; //将所有值都初始化为10
- 简化写法
int[] intArray = new int[N]; //声明数组的同时创建数组
for(int i=0; i<N-1; i++)
intArray[i] = 10;
- 声明初始化
int[] intArray = {1, 2, 3, 4, 5, 6, 7}; //声明、创建数组的同时初始化数组,数组的长度就是花括号内元素个数
在使用new创建数组对象时,其所有元素都会被自动初始化(数字数组为0,布尔数组为false,字符数组为’\0’,对象数组为null);当类型为对象数组时,由于初始值为null,因此使用之前必须给将对象赋给每个数组元素。
- 数组的使用
创建并初始化数组后,就可以访问、修改和检查数组中各个元素的值。
- 访问数组元素
通过数组名加上方括号[ ]作为索引来访问数组中的元素。需要注意的是,数组元素的下标是从0开始的,即当有N个元素时,下标的范围为0 ~ N-1。Java会自动检查所访问的下标是否越界,如果数组大小为N,但是你想要访问的元素下标<0或者>N-1,程序会抛出异常ArrayIndexOutOfBoundsException并终止。如果以上面的intArray数组为例:
intArray[0]; //返回1
intArray[7]; //抛出异常
- 修改数组元素
在数组名和下标后面加上赋值运算符和要指定的值。
intArray[0] = 0; //intArray变成:{0, 2, 3, 4, 5, 6, 7}
- 给数组起别名
Java对象数组是一组到对象的引用,数组名表示的是整个数组,而非数组中的数据。如果将一个数组变量赋予另一个变量,则两个变量将会指向同一个数组。改变其中一个数组位置 i 的值,另一个数组中 i 位置的值也会被改变。
int[] intArrayNew = intArray;
intArrayNew[2] = 5; //此时intArray[2]的值也变为5
当需要将数组复制一份时,应该重新声明,创建并初始化一个新的数组,然后将原数组中的元素值挨个复制到新数组。
int[] intArrayNew = new int[N];
for(int i=0; i<N-1; i++)
intArrayNew[i] = intArray[i];
- 二维数组
二维数组就是一维数组的数组。创建二维数组的方法和一维数组类似,只是使用两个方括号[ ],且第一维M(第一个方括号)是行数,第二维N(第二个方括号)是列数:
int[][] intArray = new int[M][N];
intArray[i][j]; //访问第i行第j列的元素