第3章 数组
Posted Aiden_Zhao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第3章 数组相关的知识,希望对你有一定的参考价值。
3.1 数组概述
数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命令,通过编号的方式对这些数据进行统一管理。
- 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型
- 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址
- 数组的长度一旦确定,就不能修改
- 可以通过下标的方式调用指定位置的元素,速度很快
3.2 一维数组
3.2.1 一维数组的声明和初始化
一维数组的声明:
- type var[] 或者 type[] var
例如:int a[]; int[] a1; double b[]; String[] c; - Java语言中声明数组时不能指定其长度(数组中元素的个数), 例如:int a[5]😭非法)
一维数组初始化:
- 动态初始化:数组声明且为数组元素分配空间与赋值操作分开进行
- 静态初始化:在定义数组的同时就为数组元素分配空间并赋值
初始化举例:
public class ArrayTest {
public static void main(String[] args) {
// 动态初始化1
int[] arr = new int[3];
arr[0] = 1;
arr[1] = 3;
arr[2] = 4;
// 动态初始化2
String[] names;
names = new String[3];
names[0] = "张三";
names[1] = "李四";
names[2] = "王五";
// 静态初始化1
int[] arr1 = new int[]{3, 6, 9};
// 或
int[] arr1 = {3, 6,9}
// 静态初始化2
int[] ids;
ids = new int[]{1001, 1002, 1003, 1004};
}
}
3.2.2 一维数组的使用
- Java中使用关键字new才创建数组,定义并利用关键字new为数组分配空间之后,才可以引用数组中的每个元素
- 数组元素的引用方式:数组名[数组元素下标]
- 数组元素下标从0开始
- 每个数组都有一个length属性指明它的长度,例如:a.length指明数组a的长度
- 数组一旦初始化,其长度无法改变
- 数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。对于不同的数据类型,默认的初始化值各有不同,如下表:
数组元素类型 | 元素默认初始值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0F |
double | 0.0 |
char | 0或写为’\\u0000’ |
boolean | false |
引用类型 | null |
举个栗子:从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
- 成绩 >= 最高分 - 10:等级为A
- 成绩 >= 最高分 - 20:等级为B
- 成绩 >= 最高分 - 30:等级为C
- 其他:等级为D
import java.util.Scanner;
public class ArrayDemo {
public static void main(String[] args) {
// 使用Scanner读取学生个数
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学生人数:");
int number = scanner.nextInt();
// 创建数组,存储学生成绩:动态初始化
int[] scores = new int[number];
// 数组元素赋值并获取数组最大元素
int maxScore = 0;
System.out.println("请输入" + number + "个学生的成绩:");
for (int i = 0; i < scores.length; i++) {
scores[i] = scanner.nextInt();
if (scores[i] > maxScore) {
maxScore = scores[i];
}
}
// 判断学生等级,输出等级和成绩
char level;
for (int i = 0; i < scores.length; i++) {
if (maxScore - scores[i] <= 10) {
level = 'A';
}else if (maxScore - scores[i] <= 20) {
level = 'B';
}else if (maxScore - scores[i] <= 30) {
level = 'C';
}else {
level = 'D';
}
System.out.println("student " + i + " score is " + scores[i] +
", grade is " + level);
}
}
}
3.3 二维数组
对于二维数组,可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组。
3.3.1 二维数组初始化
- 动态初始化
- 静态初始化
二维数组初始化举例:
public class ArrayTest2 {
public static void main(String[] args) {
// 静态初始化
int[][] arr1 = new int[][]{{1, 2, 3}, {4, 5}, {6, 7, 8}};
// 动态初始化
String[][] arr2 = new String[3][2];
String[][] arr3 = new String[3][];
}
}
注意:Java中数组不必都是规则的矩阵形式。
3.3.2 二维数组的使用
public class ArrayTest2 {
public static void main(String[] args) {
// 获取数组的长度
System.out.println(arr1.length); //3
System.out.println(arr1[1].length); //2
// 遍历二维数组:两层for循环
for(int i = 0; i < arr1.length; i++) {
for(int j = 0; j < arr1[i].length; j++) {
System.out.println(arr1[i][j]);
}
}
}
}
以上是关于第3章 数组的主要内容,如果未能解决你的问题,请参考以下文章
编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议65~69)