数组是任何编程语言都具有的的数据结构。在java语言中,它是具有相同数据类型的有序的数据的集合,是一种引用数据类型。在数组中,每个变量称为数组元素,数组元素的数据类型可以是java的任何数据类型(包括基本类型和引用类型)。数组所包含的元素的个数称为数组的长度,由数组的数据成员length 表示。数组的长度在数组对象创建之后就固定了,不能再发生改变。数组元素的下标是相对于数组第一个元素的偏移量,所以第一个元素的下标为0,以此类推,下标值可以是一个整型常量也可以是十一个整型表达式,其取值范围为0~(数组长度-1)。
数组可以将数组分为:一维数组和多维数组。
1.一维数组
1.一维数组的声明
在java语言中,通常可以使用两种方式声明一维数组,语法如下:
数据类型[] 数组名;
或
数据类型 数组名[];
注:1.数据类型可以是任何数据类型;如 double、int、char、boolean、类和String数组。
2.数组名是合法的标识符
3.方括号[] 表示定义的是一个数组,而不是普通的一个变量或对象,有几个[]就表示是几维数组。
4.方括号[] 里面不能有数字。因为数组的长度不是在声明时指定的,而是在创建时由所开辟的内存单元数目确定的。
声明数组类型的变量并没有真正的创建数组,只是给出了数组变量的名字和元素的数据类型,由于数组是引用数据类型,所以此时数组引用的值是null,表示没有指向堆内存的任何对象。
2.一维数组的创建
声明完数组后,要想真正的使用数组,还必须为数组分配内存空间,即创建数组(也叫做实例化数组)。创建数组使用关键字new ,语法如下:
数组名 = new 数组类型[n];
注:n 表示所创建的数组元素的个数。
数组的声明和创建也可以采取下述语法格式一步完成。
数据类型[] 数组名 = new 数据类型[n];
或
数据类型 数组名[] = new 数据类型[n];
用new 关键字为一个数组分配内存空间后,系统将为每个数组元素赋予一个默认值,这个默认值取决于数组元素的类型。引用类型的数组在创建时元素的默认值为null。
注:数组一旦创建后,其长度不能改变。
3.一维数组的初始化
数组的初始化就是不希望使用系统赋予的默认初始值,自行给数组元素赋初值。数组的初始化分为静态初始化和动态初始化两种。
1.静态初始化
静态初始化是指在定义数组的同时就为数组元素分配空间并赋值,这种方式通常于数组元素个数不多的情况,语法如下:
数据类型[] 数组名 = {元素1,元素2,......,元素n};
或
数据类型 数组名[] = {元素1,元素2,......,元素n};
上面的初始化中,虽然没有指定数组的长度,但给出了初值个数,这时,系统会自动根据所给的初值个数计算出数组的长度,并根据数据类型分配相应的空间。
2.动态初始化
动态初始化是指数组的声明与数组分配空间和赋值的操作分开进行。
示例:
public class Test{ public static void main(String[] args){ int[] a = new int[5]; //初始化数组 for(int i = 0;i<a.length;i++){ a[i] = i; } //打印数组元素 for(int i = 0;i<a.length;i++){ System.out.println("a[ "+i+"]="+a[i]); } } }
4.一维数组的使用
当定义了一个一维数组,并用new运算符为其分配完内存空间后,就可以通过数组名和下标来引用数组中的每个元素了。一维数组元素引用的语法如下:
数组名 [index];
注:index表示数组元素的下标,是整型的常量或表达式,从0开始,取值范围0~(数组长度-1)
示例:随机产生10个1~100的数字,并求出最大最小值
public class Test{ public static void main(String[] args){ int[] a = new int[10]; // for(int i = 0;i<a.length;i++){ a[i] = (int)(Math.random()*100)+1; } System.out.println("这十个随机数为:"); for(int i = 0;i<a.length;i++){ System.out.println(a[i]+" "); } System.out.println(); int max = a[0]; int min = a[0]; for(int i = 1;i<a.length;i++){ if(a[i]>max) max = a[i]; if(a[i]<min) min = a[i]; } System.out.println("max="+max); System.out.println("min="+min); } }
注:Math类位于java.lang包下,可以直接使用,不需要导入。该类中包含用于执行基本数学运算的方法和常量,如初等指数、对数、平方根、三角函数和常量PI等。
选择排序示例:
public class Test{ public static void selectSort(int[] b){ for(int i = 0;i<b.length;i++){ int k = i; //变量K用来保存数组中未排序元素值的最小的下标 for(int j = i+1;j<b.length;j++){ if(b[k]>b[j]){ k=j; } } if(k!=i){ int temp = b[i]; b[i] = b[k]; b[k] = temp; } } } public static void main(String args[]){ int[] a = {1,4,2,5,7,6,3,9,8}; //静态初始化数组 selectSort(a); //将数组A作为方法的参数,传递的实际是该数组对象的的句柄 for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } }
2.多维数组
java语言不支持多维数组,但是一个数组元素可以被声明为任何数据类型,因而其元素也可以是数组类型。多维数组可以看做是数组的数组。一二维数组为例,二维数组可看成是一个特殊的一维数组,其每个元素都是一个一维数组。
1.二维数组的声明
二维数组的声明方式和一维数组一样,也有两种方式,语法如下:
数据类型[][] 数组名;
或
数据类型 数组名[][];
注:1.数据类型可以是任何数据类型,包括基本类型和引用类型。
2.数组名是合法的标识符。
3.两个方括号 [] 表明的是二维数组,前面的方括号表示行,后面的方括号表示列。
4.两个方括号 []里面不能有数字,因为数组的长度不是在声明时指定的。
2.二维数组的创建
声明二维数组类型的变量并没有真正创建二维数组,想要真正使用二维数组,还必须为其分配内存空间,即创建二维数组(也叫实例化二维数组)。创建二维数组的关键字new,语法如下:
数组名 = new 数组类型[n][m];
注:1.n 表示所创建的二维数组的行数
2.m 表示所创建的二维数组的列数。
3.n必须存在,m可以存在也可以不存在。
二维数组的声明和创建也可以采取下述语法格式一步完成。
数据类型[][] 数组名 = new 数据类型[n][m];
或
数据类型 数组名[][] = new 数据类型[n][m];
3.二维数组的初始化
1.静态初始化
静态初始化是指在定义二维数组时就为数组元素分配空间并赋值,这种方式通常用于数组元素个数不多的情况。
对于静态初始化,不必给出二维数组每一堆的大小,系统会根据给出的初始值的个数自动计算出数组每一堆的大小。
2.动态初始化
动态初始化是指二维数组的声明与二维数组分配空间和赋值的操作分开进行。
4.二维数组的使用
语法如下:
数组名[index1][index2];
示例:
public class Test{ public static void main(String args[]){ int[][] a = {{2,3,7},{1,4,6}}; int[][] b = {{3,4,5,2},{2,7,1,6},{4,3,8,1}}; int[][] c = new int[2][4]; for(int i = 0;i<2;i++){ for(int j = 0;j<4;j++){ c[i][j] = 0; for(int k = 0;k<3;k++){ c[i][j] += a[i][k]*b[k][j]; } } System.out.println("矩阵A为:"); for(int i = 0;i<a.length;i++){ for(int j = 0;j<a[i].length;j++){ System.out.println(a[i][j]+" "); } System.out.println(); } System.out.println("矩阵B为:"); for(int i = 0;i<b.length;i++){ for(int j = 0;j<b[i].length;j++){ System.out.println(b[i][j]+" "); } System.out.println(); System.out.println("矩阵A与B的乘积C矩阵为:"); for(int i = 0;i<c.length;i++){ for(int j = 0;j<c[i].length;j++){ System.out.println(c[i][j]+" "); } System.out.println(); } } }