1 数组的概述
- 数组是多个相同类型的数据按照一定的顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
- 数组本身属于引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
- 创建数据对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
- 数组的长度一旦确定,就不能修改。
- 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
- 数组的分类:
- ①按照维度:一维数组、二维数组、三维数组……。
- ②按照元素的数据类型:基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)。
2 一维数组
2.1 一维数组的声明和初始化
- 格式:一维数组的声明。
数据类型[] 数组名;
- 格式:一维数组的初始化(静态初始化:在定义数组的同时就为数组元素分配空间并赋值)。
数组名 = new 数据类型[]{元素1,元素2,……,元素n}; 或 数组名 = {元素1,元素2,……,元素n};
- 格式:数组的初始化(动态初始化:数组声明且为数组元素分配空间与赋值操作分开进行)。
数组名 = new 数据类型[n];//n表示开辟空间的个数 数组名[0] = xx; //赋值 数组名[1] = xx; …… 数组名[n-1] = xx;
- 示例:静态初始化
package day05; public class ArrayTest { public static void main(String[] args) { //数组的静态初始化 String[] str = new String[]{"你好", "世界"}; String[] str2 = {"世界","你好"}; } }
- 示例:
package day05; public class ArrayTest { public static void main(String[] args) { //数组的动态初始化 String[] str = new String[5]; str[0] = "你好"; str[1] = "我好"; str[4] = "大家好"; } }
2.2 如何调用数组的指定位置的元素
- 数组只有使用new关键字为之分配空间后,才可以运用数组中的元素。
- 数组元素的应用方式:
数组名[下标];//其中下标的范围是0-(数组长度-1)
- 示例:
package day05; public class ArrayTest { public static void main(String[] args) { //数组的动态初始化 String[] str = new String[5]; str[0] = "你好"; str[1] = "我好"; str[4] = "大家好"; System.out.println(str[0]); System.out.println(str[1]); System.out.println(str[2]); System.out.println(str[3]); System.out.println(str[4]); } }
2.3 如何获取数组的长度和遍历
- 每个数组都有一个属性length指明它的长度。数组一旦初始化,其长度是不可变的。
- 示例:
package day05; public class ArrayTest { public static void main(String[] args) { //数组的动态初始化 String[] str = new String[5]; str[0] = "你好"; str[1] = "我好"; str[4] = "大家好"; System.out.println("数组的长度是:" + str.length); } }
- 示例:
package day05; public class ArrayTest { public static void main(String[] args) { //数组的动态初始化 String[] str = new String[5]; str[0] = "你好"; str[1] = "我好"; str[4] = "大家好"; for (int i = 0; i < str.length; i++) { System.out.println("数组的元素是:" + str[i]); } } }
2.4 数组元素的默认初始化值
- 数组是引用数据类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的元素也被按照成员变量同样的方式被隐式初始化。
- 对于基本数据类型而言,默认初始化值各有不同。
- 对于引用数据类型而言,默认初始化值为null。
2.5 一维数组的练习
- 示例:网红题
package day05; /** * 公寓单间出租4个月,1550元/月(水电费公摊,网费35元/元),空调、卫生间、厨房齐全。 * 屋内均是IT行业人士,喜欢安静。所以要求求租者最好是同行或者刚毕业的年轻人,爱干净、安静。 */ public class ArrayTest { public static void main(String[] args) { int[] arr = new int[]{8, 2, 1, 0, 3}; int[] index = new int[]{2, 0, 3, 2, 4, 0, 1, 3, 2, 3, 3}; String tel = ""; for (int i = 0; i < index.length; i++) { tel += arr[index[i]]; } System.out.println("联系方式:" + tel); } }
- 示例:
package day05; import java.util.Scanner; /** * 从键盘读入学生成绩,找出最高分,并输出学生成绩等级。 * 如果成绩>=最高分-10,则等级为A。 * 如果成绩>=最高分-20.则等级为B。 * 如果成绩>=最高分-30,则等级为C。 * 其余,等级为D。 */ public class ArrayTest { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("请输入学生的个数:"); int num = input.nextInt(); int[] scores = new int[num]; System.out.println("请输入" + num + "个成绩"); for (int i = 0; i < scores.length; i++) { scores[i] = input.nextInt(); } //等级判断 int max = scores[0]; for (int i = 0; i < scores.length; i++) { if (max <= scores[i]) { max = scores[i]; } } for (int i = 0; i < scores.length; i++) { if (scores[i] >= max - 10) { System.out.println("学生" + i + "的分数是" + scores[i] + "等级是A"); } else if (scores[i] >= max - 20) { System.out.println("学生" + i + "的分数是" + scores[i] + "等级是B"); } else if (scores[i] >= max - 30) { System.out.println("学生" + i + "的分数是" + scores[i] + "等级是C"); }else{ System.out.println("学生" + i + "的分数是" + scores[i] + "等级是D"); } } } }
3 二维数组
- java语言里提供了支持多维数组的语法。
- 如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格。
- 对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组。
3.1 二维数组的声明和初始化
- 格式:二维数组的声明
数据类型[][] 数组名;
- 格式:二维数组的静态初始化
数组名 = {{元素1,元素2,元素3},{元素4},……,{元素n}}
- 格式:二维数组的动态初始化
数组名 = new 数据类型[m][n]; //其中m表示二维数组中有多少个一维数组; //其中n表示二维数组中一维数组的元素的个数;
- 格式:二维数组的动态初始化
数组名 = new 数据类型[m][]; //其中m表示二维数组中有m个一维数组; //一维数组需要分别进行初始化;
- 示例:
package day05; public class ArrayTest { public static void main(String[] args) { //静态初始化 int[][] arr = {{1,2,3},{4,5,6},{7,8}}; } }
- 示例:
package day05; public class ArrayTest { public static void main(String[] args) { //动态初始化 int[][] arr = new int[3][2]; } }
- 示例:
package day05; public class ArrayTest { public static void main(String[] args) { //动态初始化 int[][] arr = new int[3][]; } }
3.2 如何调用数组的指定位置的元素
- 数组只有使用new关键字为之分配空间后,才可以运用数组中的元素。
- 数组元素的应用方式:
数组名[m][n];//m的范围是0-外层一维数组的长度,m的范围是0-内层一维数组的长度
- 示例:
package day05; public class ArrayTest { public static void main(String[] args) { //动态初始化 int[][] arr = new int[3][]; arr[0] = new int[5]; arr[1] = new int[9]; System.out.println(arr[1][2]); } }
3.3 如何调用数组的指定位置的元素
- 每个数组都有一个属性length指明它的长度。数组一旦初始化,其长度是不可变的。
- 外层一维数组的长度是数组名.length。
- 示例:
package day05; public class ArrayTest { public static void main(String[] args) { //动态初始化 int[][] arr = new int[3][]; arr[0] = new int[5]; arr[1] = new int[9]; System.out.println("二维数组的长度是:" + arr.length); System.out.println("二维数组中第一个一维数组的长度是:" + arr[0].length); System.out.println("二维数组中第二个一维数组的长度是:" + arr[1].length); } }
- 示例:
package day05; public class ArrayTest { public static void main(String[] args) { //动态初始化 int[][] arr = new int[3][]; arr[0] = new int[5]; arr[1] = new int[9]; arr[2] = new int[3]; //赋值 for (int i = 0; i < arr.length; i++) { for (int i1 = 0; i1 < arr[i].length; i1++) { arr[i][i1] = i * i1; } } //输出 for (int i = 0; i < arr.length; i++) { for (int i1 = 0; i1 < arr[i].length; i1++) { System.out.print(arr[i][i1]+"\t"); } System.out.println(); } } }
3.4 二维数组的练习
- 示例:
package day05; public class ArrayTest { public static void main(String[] args) { int[][] arr = {{3, 5, 8}, {12, 9}, {7, 0, 6, 4}}; int result = 0; for (int i = 0; i < arr.length; i++) { for (int i1 = 0; i1 < arr[i].length; i1++) { result += arr[i][i1]; } } System.out.println("和是:" + result); } }
- 示例:
package day05; /** * 打印杨辉三角 */ public class ArrayTest { public static void main(String[] args) { int[][] yangHui = new int[10][]; for (int i = 0; i < yangHui.length; i++) { yangHui[i] = new int[i + 1]; //给首尾元素赋值 yangHui[i][0] = 1; yangHui[i][i] = 1; //给每行的非首尾元素赋值 if (i >= 2) { for (int j = 1; j < yangHui[i].length - 1; j++) { yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j]; } } } for (int i = 0; i < yangHui.length; i++) { for (int j = 0; j < yangHui[i].length; j++) { System.out.print(yangHui[i][j] + "\t"); } System.out.println(); } } }