第四章 数组

1、数组的概念

  • 数组概念: 数组用于在单个变量中存储多个值,而不是为每个值声明单独的变量。

1.1 数组的定义

​ 所谓数组(array),就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,以便统一管理他们,然后用编号区分他们,这个名字称为数组名,编号称为下标或索引(index)。组成数组的各个变量称为数组的元素(element)。数组中元素的个数称为数组的长度(length)。

1.2 数组的特点

  1. 数组的长度一旦确定就不能修改
  2. 创建数组时会在内存中开辟一整块连续的空间
  3. 存取元素的速度快,因为可以通过[下标],直接定位到任意一个元素

1.3 数组的分类

  1. 按照维度分类
    • 一维数组:存储一组数据
    • 二维数组:存储多组数据,相当于二维表,一行代表一组数据,这是这里的二维表每一行长度不要求一样。
  2. 按照元素分类
    • 基本数据类型的元素:存储数据值
    • 引用数据类型的元素:存储对象(本质上存储对象的首地址)(这个在面向对象部分讲解)

注意:无论数组的元素是基本数据类型还是引用数据类型,数组本身都是引用数据类型

2、数组的声明和使用

2.1 声明数组

要声明一个数组,用方括号定义变量类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 数组类型[] 数组名称;
String[] cars;

//比如,要存储一个小组的成绩
int[] scores;

//比如,要存储一组字母
char[] letters;

//比如,要存储一组姓名
String[] names;

//比如,要存储一组价格
double[] prices;

数组的元素类型:即创建的数组容器可以存储什么数据类型的数据。元素的类型可以是任意的 Java的数据类型。例如:int, String, double 等。

2.2 初始化数组

两种方式:

  1. 我们声明了一个变量来保存字符串数组后,要向它插入值,可以将值放在逗号分隔的列表中,放在花括号内
1
2
String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
int[] myNum = {10, 20, 30, 40};
  1. 先指定长度,后续再插入值
1
2
3
4
5
6
7
8
// 指定长度为5
int[] arr = new int[5];
// 通过下标插入值
arr[0] = 2;
arr[1] = 4;
arr[2] = 6;
arr[3] = 8;
arr[4] = 10;

注意:指定数组长度后,插入具体数值前,数组中的数据都是默认值,整数与浮点类型的默认值为 0 或 0.0,boolean 的默认值为 false。

2.3 数组的使用

  1. 更改数组元素 - 要更改特定元素的值,请参考索引号
1
2
String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
cars[0] = "Opel";
  1. 访问数组元素 - 您可以通过引用索引号来访问数组元素。
1
2
String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
System.out.println(cars[0]);
  1. 获取数组的长度 - 要知道数组有多少个元素,可以使用 length 属性
1
2
String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
System.out.println(cars.length);

2.4 数组的遍历

  • 可以使用for循环遍历数组元素,并使用 length 属性指定循环应该运行多少次
1
2
3
4
String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (int i = 0; i < cars.length; i++) {
System.out.println(cars[i]);
}
  • 还有一个“for-each”循环,专门用于遍历数组中的元素
1
2
3
4
String[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (String i : cars) {
System.out.println(i);
}

​ 上面的例子可以这样读:对于 cars 中的每个 String 元素( 称为 i ),打印出 i 的值。如果比较 for 循环和 for-each 循环,就会发现 for-each 方法更容易编写,它不需要计数器( length 属性 ),而且可读性更强。

3、多维数组

​ 多维数组是存储数组的数组。当你希望将数据存储为表格形式 (如包含行和列的表) 时,多维数组非常有用。

  • 要创建二维数组,请在每个数组各自的花括号中再添加数组。如:
1
int[][] myNumbers = { {1, 2, 3}, {4, 5, 6} };

  • 要访问 myNumbers 数组的元素,请指定两个索引:一个用于数组,另一个用于该数组中的元素。下面的例子访问了 myNumbers 的第二个数组中的第三个元素:
1
2
int[][] myNumbers = { {1, 2, 3}, {4, 5, 6} };
System.out.println(myNumbers[1][2]); // 输出 6
  • 你同样可以更改元素的值:
1
2
3
int[][] myNumbers = { {1, 2, 3}, {4, 5, 6} };
myNumbers[1][2] = 9;
System.out.println(myNumbers[1][2]); // Outputs 9 instead of 6
  • 我们也可以在另一个for循环中使用for循环来获取二维数组的元素(我们仍然需要指向两个索引):
1
2
3
4
5
6
7
8
9
10
public class Main {
public static void main(String[] args) {
int[][] myNumbers = { {1, 2, 3}, {4, 5, 6} };
for (int i = 0; i < myNumbers.length; ++i) {
for(int j = 0; j < myNumbers[i].length; ++j) {
System.out.println(myNumbers[i][j]);
}
}
}
}