前面几章的变量只能存储单个值,而且每个变量之间都相互独立,无法进行多个变量进行统一管理、操作。
什么是数组?
可以一次性定义多个同类型的变量,可以存储多个数据,并且可以对多个变量(数组)进行统一管理。
数组的使用流程:
(1) 声明数组:确定数组的数据类型和数组名。
数据类型[] 数组名; // 建议
注意:数据类型 []数组名; 数据类型 数组名[]; 都可以
int[] a; int []a; int a[];
(2) 分配空间:确定数组存储的数据个数,通常称为数组的长度。
数组基本应用语法: 【基础语法】
(1) 下标:为了方便管理数组中每个存储空间,对每个空间进行自动编号,此 编号称为下标。
数组的下标从 0 开始,最大下标为数组的长度-1
(2) 数组的操作:通过数组名和下标往数组中存储或是访问对应空间中的数据
存储数据:数组名[下标]=值
访问数据:数组名[下标]
(3)遍历数组:对数组中的所有元素一一进行访问的过程
// 利用循环变量控制数组的下标
for(int i=0;i<数组的长度;i++){
// 数组名[i]访问数组中数据
}
(4) 获取数组的长度:数组名.length
(5) 数组具有默认值,默认值如下:
整数(byte/short/int/long):0
小数(float/double):0.0
字符(char):空字符('\u0000')
布尔(boolean):false
对象:null
注意:
如果操作数组时,超过数组下标范围时,编译通过运行报错,错误信息为:
java.lang.ArrayIndexOutOfBoundsException
(数组下标越界:上越界+下越界)
数组的其他定义方式: 【基础语法】
(1) 先声明,再分配空间:
数据类型[] 数组名;
数组名 = new 数据类型[长度];
int[] a;
a = new int[3];
(2) 声明的同时并分配空间:
数据类型[] 数组名 = new 数据类型[长度];
int[] a = new int[3];
(3) 声明的同时并赋值:(显示初始化)
数据类型[] 数组名 = new 数据类型[]{值1,值2,值3};
int[] a = new int[]{1,2,3};
注意:[]中不再指定数组的长度,由{}中数据的个数决定 错误写法:
int[] a = new int[3]{1,3,2};
(4) 声明的同时并赋值(显示初始化)
数据类型[] 数组名 = {值1,值2,值3};
int[] a = {1,2,3};
注意:这种定义方式声明和初始化必须一起定义 错误写法:
int[] a;
a = {1,2,3};
什么是数组扩容?
(1) 创建一个更大长度的新数组,通常为原数组的2倍
(2) 将原数组中的元素进行一一复制到新的数组中
(3) 用新地址覆盖旧地址
这里采用java.util.Arrays.copyOf()工具类实现数组扩容。
数组名 = java.util.Arrays.copyOf(数组名,新长度)
参数说明:
第一个参数:代表需要扩容的数组名字
第二个参数:代表新数组的长度
返回值: 代表新数组的地址
举例:
int[] a = {11,22,33,44};
// 继续存储 2 个年龄
// 1. 创建一个新数组,长度为2倍
// 2. 将原数组中内容一一赋值
// 3. 新地址覆盖旧地址
a=java.util.Arrays.copyOf(a,a.length*2);
数组的排序?
将数组中数据按照一定的顺序进行存储(从小到大,从大到小)就是排序。
什么是冒泡排序?
每次将相邻的两个元素进行一一比较,较大的数据逐渐往后放 (从小到大)
// 分轮进行比较,比较的轮数为 长度-1
for(int i=1;i<a.length;i++){
for(int j=0;j<a.length-i;j++){
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] =temp;
}
}
}
// 第1轮:j< 4 - i
for(int j=0;j<3;j++){
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] =temp;
}
}
// 第2轮:
for(int j=0;j<2;j++){
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] =temp;
}
}
// 第3轮:
for(int j=0;j<1;j++){
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] =temp;
}
}
数组的快速排序?
这里采用JDK提供的工具实现下面图片数组的快速排序:
java.util.Arrays.sort(a);