day6:数组
一、数组1. 概念 可以通同时存储多个 相同类型的数据并且可以对其中的多个数据统一操作。2. 使用数组的流程(1) 声明指定数组的存储数据类型同时指定数组名数据类型[] 数组名; // int[] a; 建议写法// int []a; int a[];(2) 分配空间指定数组的 长度数组名 new 数据类型[长度];(3) 使用数组【基础重点】a. 数组中存储的数组被称为数组元素。b. 对数组的操作分为存元素 和 取元素c. 对数组的存取元素通过数组名 和下标进行操作存元素 数组名[下标] 值;取元素 数组名[下标]d. 对数组的每一个空间进行编号这个编号被称为下标。数组的下标范围 0 ~ 数组长度-1e. 如果操作数组时指定的数组下标不在 0~数组长度-1的范围内编译通过运行报错错误信息为java.lang.ArrayIndexOutOfBoundsException(数组的下标越界)f. 数组的遍历对数组中的元素进行一一访问的过程。// 用循环的变量 控制 数组的下标for(int i0;i 数组的长度i){// 通过 a[i] 操作数组的每一个元素}获取数组的长度 数组名.length3. 数组具有默认值值默认值情况如下【掌握】(1) 整数 0(2) 小数0.0(3) 布尔false(4) 字符空字符 (\u0000)(5) 对象/引用null4. 数组的其他定义方式【多练】(1) 声明的同时分配空间数据类型[] 数组名 new 数据类型[长度];(2) 显示初始化数据类型[] 数组名 new 数据类型[]{值1,值2,值3};注意[]中不能再指定数组的长度长度有{}中值个数决定。(3) 显示初始化数据类型[] 数组名 {值1, 值2, 值3};注意声明和初始化必须一起完成同时数组的长度由{}中值个数决定。int[] a ;a {1,7,4}; //error错误二、数组的内存【难点理解】1. 数组在内存中空间是连续的。2. 数组名存储的是 数组在 内存中的首地址。3. 计算机中的寻址方式首地址 下标 * 每一个存储空间的字节数。---》(数组名[下标])4. 数组下标从 0开始是为了提高 寻址效率。5. 数组类型的变量相互赋值传递的是数组在内存中首地址。基本数据类型变量相互赋值传递的是数值。三、数组的扩容1. 扩容思想【理解】(1) 先申请一个更大空间的新数组通常新数组长度为原数组长度的2倍(2) 将原数组中的元素进行一一复制到新数组中(3) 新地址 覆盖 旧地址2. 数组扩容实现的方式(1) 第一种方式int[] a new int[]{1,7,4,3};// 1. 申请新数组 长度为原有数组的2倍int[] b new int[a.length*2];// 2. 将原有数组中内容进行一一拷贝到新数组中for(int i0;ia.length;i){b[i] a[i];}// 3. 新的地址覆盖旧的地址a b;~~~(2) 利用 System.arraycopy(a,0,b,0,a.length); // 完成 数组复制参数说明第一个参数原数组名第二个参数原数组拷贝的起始下标第三个参数新数组名第四个参数新数组的存储起始下标第五个参数拷贝的个数/长度(3) 利用 java.util.Arrays.copyOf(原数组名,新数组的长度) // 完成新数组的定义数组的复制参数说明第一个参数扩容的数组名第二个参数指定新数组的长度四、可变长参数【阅读源码和API时经常遇到】1. 可变长参数函数可以接受个数不固定的实参jdk5.0 提出的概念。2. 注意参数的个数由调用者调用数给定 个数确定可变长参数可以接受不等数量的相同类型的数据。3. 语法 public static 返回值类型 函数名(数据类型... 变量名){}4. 使用可变长参数会自动生成对应类型数组所以在函数中直接将 可变长参数当做数组应用即可。5. 语法规定一个函数中最多只能定义一个可变长参数并且可变长参数必须定义在形参最后一个位置。6. 可变长参数可以提高代码的灵活度。五、数组的排序【面试重点】1. 冒泡排序法将相邻的两个元素进行一一比较元素大逐步往后移。 (从小到大排序)2. 选择排序固定一个下标对应的元素和其他元素进行一一比较较小数据逐步往前移。(从小到大排序)3. 利用 java.util.Arrays.sort(数组名); 进行排序 ---》快速排序六、二维数组【了解即可】1. 语法(1) 声明数据类型 [] [] 数组名;(2) 分配空间数组名 new 数据类型[行数] [列数]; // 行 又称为高维 列低维2. 二维数组的使用(1) 通过行和列对二位数组进行访问数组名[行标] [列标]注意行标和列表都是从 0 开始例如 a[0] [3] // 第0行第3列的元素(2) 二维数组也具有默认值同一维数组(3) 获取二维数组的行数 数组名.length列数数组名[行标].length注意二维数组是一维数组的一维数组。3. 二维数组的其他定义方式(1) 声明的同时并分配空间数据类型[][] [] [] 数组名 new 数据类型[行数] [列数];(2) 显示初始化数据类型[] [] 数组名 new 数据类型[] []{{值1,值2},{值3,值4},{值5,值6}};注意后面 {} 中 {}的个数决定行数所以[] []中个不能再制定行数和列数。(3) 显示初始化数据类型[] [] 数组名 {{值1,值2},{值3,值4}};注意声明和初始化必须一起完成。4. 不规则的二维数组(1) 概念每一行的列数不相同(2) 不规则的二维数组的定义方式a. 数据类型[] [] 数组名 new 数据类型[行数] []数组名[0] new 数据类型[长度];数组名[1] new 数据类型[长度];....注意二维数组定义可以只指定行数/高维但是不能只指定列数/低维b. 数据类型[] [] 数组名 {{值1},{值1,值2,值3},{值1,值2}};