第5章 数组
5.1 数组的定义
• 数组是固定的不能扩展
• 可以存储基本数据类型或对象或接口
• 通过数组名和下标可以访问各元素,下标从0开始
5.2 声明数组
• 数组的声明包括数组名和所包含的元素类型
• 声明方法: 数组类型 数组名[ ]; 或 数组类型[ ] 数组名;
例如 int age[ ]; 或 int [ ] age; 都可以。
5.3 创建数组
• 利用new 来为数组型变量分配内存空间
• 数组名=new 数组元素类型[元素个数];
例如 age=new int[10];
必须分配内存后才能使用数组
两步可以合并,如:int age[ ]=new int[10];
5.4 数组初始化
数组的初始化:用new创建或直接静态初始化
• 一维数组:int a[]=new int[5]; // 定义并初始化
int a[]; a=new int[5]; // 先声明后初始化
int a[]={1,2,3,4}; // 静态初始化
int size=5; int a[]=new int[size];//在上面通用的基础上,用变量定义数组的长度。
int a[]=new int[5]; // 此时系统为数组a中的每一个元素都初始化为0;
double d[]=new double[5];// 此时系统为数组d中的每一个元素都初始化为0.0;
String s[]=newString[5];// s[i]=null, (0<=i<=4); s.length=5
• 多维数组:Java中多维数组的声明和初始化应按从高维到低维(即从左到右)的顺序进行;
必须指定高层维数,不能在空维后定义数组维!
错误示例:int a[][][]=new int[][][]; // 高层维数未指定
int a[][][]=new int[1][][4]; //不能在空维后定义数组维
int a[][][]=new int [][][4];
正确示例:int a[][][]=new int[1][][];
int a[][][]=new int[1][4][];
int a[][][]=new int[1][4][5];
总结:定义数组时,第一维必须定义!且要从高维开始定义,空维后不能定义;
二维数组的初始化:
• 在Java语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。
• 静态初始化 int intArray[ ][ ]={{1,2},{2,3},{3,4,5}};
• 动态初始化(难点、很重要)
int a[ ][ ] = new int[2][ ];
a[0] = new int[3];
a[1] = new int[5];
5.5 数组元素的使用
通过下标访问数组元素,而不能只通过数组名访问整个数组。
注意:二维数组中:数组名.length返回的是数组的行数。数组名[行号].length返回的是该行的列数。
每个数组都有一个属性length指明数组的长度,例如arr.length指明数组arr的长度。注意length是属性不是方法!
5.6 数组的方法
数组复制
循环赋值
System.arraycopy(src,srcPos, dest, destPos, length);
System.arraycopy(原始数组, 起始索引, 目标数组, 起始索引, 复制长度);
注意:复制的长度不要超过目标串的长度。否则会发生异常。
数组拷贝示例:
public class Test {
public static void main(String[] args) {
int arrInt1[]={12,34,5,1,45};
int arrInt2[]=new int[6];
System.arraycopy(arrInt1,0, arrInt2, 1, 5);
for (int i = 0; i < arrInt2.length; i++) {
System.out.print(arrInt2[i]+" ");
}
}
}
输出结果为:0 12 34 5 1 45
在java.util.Arrays包中:数组填充Arrays.fill( )
当我们配置一个数组之后,其会依数据型态来给定默认值,例如整数数组就初始为0,您可以使用Arrays.fill()方法来将所有的元素设定为指定的值。
在java.util.Arrays包中:数组比较Arrays.equals( ):
比较两个数组中的元素值是否全部相等,如果是将传回true,否则传回false。
在java.util.Arrays包中:数组排序Arrays.sort(数组名):
这个方法可以对指定的数组排序,所使用的是快速排序法。