一、理解
1. 数组:一次性定义多个相同类型的变量,可以存 储多个数据,并且可以对多个变量进行统一
2. 数组的重要因素:数据类型、数组的长度 3. 数组的使用:
(1) 声明数组:确定数据类型 数据类型[] 数组名; // 建议 数据类型 数组名[];
数据类型 []数组名;
int[] a;
(2) 分配空间:确定数组的长度
数组名 = new 数据类型[长度]; a = new int[5];
4. 数组细节:
(1) 数组的下标:从0开始,依次为0、1、2...数 组的长度-1
(2) 数组的访问:数组名+下标,数组名[下标]
(3) 当访问数组时,给定的下标不合理,编译通 过,运行报错,错误信息为: java.lang.ArrayIndexOutOfBoundsExcept ion(数组的下标越界)
(4) 数组中元素进行一一访问,数组的遍历 for(int i=0;i<数组的长度;i++){
// 通过 数组名[i] 访问数组元素 }
(5) 获取数组的长度:数组名.length
5. 数组的默认值:
整数类型:0
小数类型:0.0
布尔类型:false
字符类型:空字符
引用类型:null
6.数组的定义
(1) 先声明,再分配 空间 数据类型[] 数组名;
数组名 = new 数据类型[长度];
(2) 声明的同时分配空间:
数据类型[] 数组名 = new 数据类型[长
度];
(3) 显示初始化:
数据类型[] 数组名 = new 数据类型[]{数
据1,数据2};
注意:数组的长度由{}中数据的个数决定
(4) 显示初始化:
数据类型[] 数组名 = {数据1,数据2,数据
3};
注意:数组的声明和初始化一起完成
二、数组的内存
1. 数组在内存的空间连续的
2. 数组类型的变量粗出的是数组在内存空间的首地
址
3. 寻址方式:首地址+下标*数据类型的字节数
三、数组的扩容
1.思想
(1) 创建一个长度更大的新数组,通常为原数组的 两倍
(2) 将原数组中内容一一赋值到新的数组中
(3) 新地址覆盖旧地址
2. 数组扩容的实现:
(1) 第一种方式:
int[] a
= new int[]{1,8,4}; // 长度为3 for(int i=0;i<a.length;i++){
System.out.print(a[i]+"
");
}
System.out.println();
// 存储 一个新的数据 5
// 数组长度不够用,需要扩容 // 1. 定义一个更大长度的数组 int[] b = new
int[a.length*2];
(2) 第二种方式:借助工具类实现扩容 a=java.util.Arrays.copyOf(原数组名,新数 组的长度);
中
// 2. 将旧数组中内容,赋值到新数组
for(int i=0;i<a.length;i++){ // 新 = 旧
b[i] = a[i]; }
// 3. 新地址覆盖旧地址
a = b; System.out.println("扩容之后的
结果:");
for(int i=0;i<a.length;i++){
System.out.print(a[i]+"
");
}
System.out.println();
(2) 第二种方式:借助工具类实现扩容 a=java.util.Arrays.copyOf(原数组名,新数 组的长度);
四、二维数组 【开发不常用+算法应用-比赛重点 +考试-不设为重点】
1. 理解:一维数组的一维数组,有行和列
2. 访问二维数组,通过行标和列标进行访问:数组 名[ 行标][ 列标 ] (行标也称为高维,列标也 成:低维)
3. 二维数组的遍历:
// 通过外层循环控制行
for(int i=0;i<数组名.length;i++){
// 通过内层循环控制列
for(int j=0;j<数组名 [i].length;j++){
// 通过 a[i][j] 访问对应的数据 }
}
五、数组的排序
1. 排序:将数组中元素按照一定的顺序进行存储 2. 排序的方式:从小到大
(1) 冒泡排序:每次将相邻的两个元素进行比较, 将较大的元素逐步往后放
// 外层循环:控制比较的轮数 for(int i=1;i<a.length;i++){
// 内层循环控制每轮具体比较的内容 for(int j=0;j<a.length-i;j++){ // 使用 a[j] 和 a[j+1] 进行比较 -》
相邻
} }
}
if(a[j]>a[j+1]){ // 交换
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;}}}
(2) 第二种方式:借助工具类 java.util.Arrays.sort(数组名);