在计算机语言中数组是非常重要的集合类型,大部分计算机语言中数组具有如下三个基本特性:
- 一致性:数组只能保存相同数据类型元素,元素的数据类型可以是任何相同的数据类型。
- 有序性:数组中的元素是有序的,通过下标访问。
- 不可变性:数组一旦初始化,则长度(数组中预分配的元素个数)不可变。
一维数组: 声明数组,创建数组空间,初始化三步.
格式1: 元素类型[] 数组名(推荐采用) ;
格式2: 元素类型 数组名[] ;
数组元素的类型可以是基本类型,也可以是类或接口。
数组初始化
声明完成就要对数组进行初始化,数组初始化的过程就是为数组每一个元素分配内存空间,并为每一个元素提供初始值。初始化之后数组的长度就确定下来不能再变化了。
数组初始化可以分为静态初始化和动态初始化。
静态初始化
静态初始化就是将数组的元素放到大括号中,元素之间用逗号(,)分隔。
使用场景: 在已知数组的每一个元素内容情况下使用的,这样一次到位。
示例代码如下:
建议此种完整的形式
String[] strArray = new String[] {"张三","李四","王五"};
// 简写形式
String[] strArray = {"张三","李四","王五"};
简写形式如果是此类写法会编译不通过,
return {"张三","李四","王五"}
.
所以不建议简写, 建议写全称
动态初始化
动态初始化使用new运算符分配指定长度的内存空间,
语法如下:new 元素数据类型[数组长度] ;
new分配数组内存空间后,和类的成员变量的规则保持一致, 不同类型都会有默认值,如下图。
多维数组
二维数组声明
当数组中每个元素又可以带有多个下标时,这种数组就是“多维数组”。
Java中声明二维数组需要有两个中括号,具体有三种语法如下:
元素数据类型[][] 数组变量名;
元素数据类型 数组变量名[][];
元素数据类型[] 数组变量名[];
二维数组的初始化
二维数组的初始化也可以分为静态初始化和动态初始化。
静态初始化
int[][] intArray = new int[][] { { 1, 2, 3 }, { 11, 12, 13 }, { 21, 22, 23 }, { 31, 32, 33 } };
提示 严格意义上说Java中并不存在真正意义上的多维数组,只是一维数组,不过数组中的元素也是数组,以此类推三维数组就是数组的数组的数组了,例如{ { {1, 2}, {3} }, { {21}, {22, 23} } }表示一个三维数组。
动态初始化
语法: new 元素数据类型[高维数组长度] [低维数组长度] ;
3. 不规则数组
由于Java多维数组是数组的数组,因此会衍生出一种不规则数组
动态初始化不规则数组比较麻烦,不能使用new int[4][3]语句,而是先初始化高维数组,然后再分别逐个初始化低维数组。代码如下:
int intArray[][] = new int[4][]; //先初始化高维数组为4
//逐一初始化低维数组
intArray[0] = new int[2];
intArray[1] = new int[1];
intArray[2] = new int[3];
intArray[3] = new int[3];
其它
数组中常见的Exception:
- 访问到不存在的角标: ArrayIndexOutOfBoundsException
foreach关键字
jdk1.5 新增的关键字, 可用于数组, 集合类型的遍历. 隐藏了下标, 建议使用. 除非是需要下标值.
foreach - iterate over an array or Iterable
for (类型 变量: 数组) {}
Array类的一些方法
数组拷贝由 java.lang.System的静态方法
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length)
// 数组打印
Arrays.toString(array);
// 升序排列
Arrays.sort(array);
小案例
public static void main(String[] args) {
int[] array = { 1, 5, 3 };
int[] bArray = { 11, 55, 33 };
// 数组拷贝
System.arraycopy(array, 1, bArray, 1, 1);
System.out.println(Arrays.toString(bArray));
// 数组打印
System.out.println(Arrays.toString(array));
// 升序排列
Arrays.sort(array);
System.out.println(Arrays.toString(array));
}