数组
数组是一个标识符(变量名)和一组下标来代表一组具有相同数据类型的数据元素的集合。这些数据元素在计算机存储其中占用一片连续的存储空间,其中的每个数组元素在数据在数组中的位置是固定的,可通过下标的编号加以区分,并通过标识符和下标访问每一个数据元素。数组一般分为一维数组、二维数组,以此类推。通常把二维及其以上的数组称为多维数组。
数组的特点:
1)定长:数组的长度是固定的。 2)按顺序访问。我们在访问某个数组元素时,计算机是从第1个元素开始顺序访问,直到指定位置的元素。
1. 一维数组
- 一维数组的声明
声明一个数组就是要确定数组名、数组的维数和数组元素的数据类型。数组名是用户自定义的标识符,它是数组类对象的引用类型变量的名字。数组元素的数据类型可以是Java的基本数据类型(int、float、char等),也可以是引用类型(类(class)、接口(interface)等)
int intArray[]; //声明一个数组名为intArray的整型数组
double[] b; //声明一个数组名为b的浮点型双精度数组
- 一维数组的初始化
1)直接指定初值方式
int[] a1 = {12,34,-9,65};
2)用new初始化数组
类型标识符 数组名[];
数组名 = new 类型标识符[数组长度];
int[] intArray;
intArray = new int[3];
类型标识符 数组名 = new 类型标识符[数组长度];
int a = new int[3];
2. 二维数组
- 二维数组的声明
多维数组分配内存空间的几种方法
1)直接为每一位分配空间
int a[][]=new int[2][3];
2)从最高维开始,分别为每一维分配空间
int a[][] = new[2][];
a[0] = new int[3];
a[1] = new int[3];
- 二维数组元素的引用
数组名[下标1][下标2]
其中,下标1、下标2为整型常数或表达式,如a[2][3]等,同样。每一维的下标都从0开始。
- 二维数组的初始化
1)直接对每个元素进行赋值。
2)在声明数组的同时进行初始化。
int a[][]={{2,3},{1,5},{3,4}};
- 二维数组举例
实现两个矩阵的相乘。
public class MatrixMultiply {
public static void main(String[] args) {
int i, j, k;
int a[][] = new int[2][3];
int b[][] = { { 1, 5, 2, 8 }, { 5, 9, 10, -3 }, { 2, 7, -5, -18 } };
int c[][] = new int[2][4];
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
a[i][j] = (i + 1) * (j + 2); // 定义数组a的内容
}
}
for(i = 0 ; i < 2 ; i++){
for(j = 0;j < 4;j++){
c[i][j] = 0;
for(k = 0;k < 3;k++){
c[i][j] += a[i][k] * b[k][j];
}
}
}
System.out.println("***A***");
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++)
System.out.print(a[i][j] + " ");
System.out.println();
}
System.out.println("***C***");
for (i = 0; i < 2; i++) {
for (j = 0; j < 4; j++)
System.out.print(c[i][j] + " ");
System.out.println();
}
}
}
运行结果:
3.数组实用类Arrays
1)binarySearch(二分查找)
binarySearch(type[] a,int fromIndex,int toIndex,type key)
调用该方法时要求数组中元素已经按升序排列,这样才能的到正确结果。
2)copyOf(拷贝)
type[] copyOf(type[] original,int newLength)
这个方法将会把original数组复制成一个新数组,Length是新数组长度。如果Length < original数组长度,则在原数组后面补充0(数值型),false(布尔型)或者null(引用型)。
3)copyOfRange
type[] copyOfRange(type[] original,int from,int to)
这个方法只复制original数组的from索引到to索引。
4)equals(相等)
boolean equals(type[] a,type[] a2)
如果a数组和a2数组长度及数组元素也一一相同,则该方法返回true.
5)fill(填充)
void fill(type[]a,type val)
把a数组所有元素赋值为val。
void fill(type[]a,int fromIndex, int toIndex,type val)
把a数组fromIndex到toIndex索引的数组元素赋值为val。
6)sort(排序)
void sort(type[] a)
该方法对a数组的数组元素进行排序。
void sort(type[] a,int fromIndex, int toIndex)
对a数组fromIndex到toIndex索引的数组元素进行排序
7)toString(转换为字符串)
String toString(type[] a)
该方法将一个数组转换为字符串。该方法按顺序把多个数组元素连缀在一起,多个数组使用英文逗号(,)和空格隔开。
Arrays类的使用实例:
public class ArraysEg {
public static void main(String[] args) {
int[] a = new int[]{3,4,5,6}; //定义一个数组
int[] a2 = new int[]{3,4,5,6};
System.out.println("a数组与a2数组是否相等:" + Arrays.equals(a, a2));
int[] b = Arrays.copyOf(a, 6);
System.out.println("a数组与b数组是否相等:" + Arrays.equals(a, b));
System.out.println("b数组的元素为:" + Arrays.toString(b));
Arrays.fill(b, 2,4,1);
System.out.println("b数组的元素为:" + Arrays.toString(b));
Arrays.sort(b);
System.out.println("b数组的元素为:" + Arrays.toString(b));
}
}
运行结果: