第四章 数组
1、数组的概念
- 数组概念: 数组用于在单个变量中存储多个值,而不是为每个值声明单独的变量。
1.1 数组的定义
所谓数组(array),就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,以便统一管理他们,然后用编号区分他们,这个名字称为数组名,编号称为下标或索引(index)。组成数组的各个变量称为数组的元素(element)。数组中元素的个数称为数组的长度(length)。
1.2 数组的特点
- 数组的长度一旦确定就不能修改
- 创建数组时会在内存中开辟一整块连续的空间
- 存取元素的速度快,因为可以通过[下标],直接定位到任意一个元素
1.3 数组的分类
- 按照维度分类
- 一维数组:存储一组数据
- 二维数组:存储多组数据,相当于二维表,一行代表一组数据,这是这里的二维表每一行长度不要求一样。
- 按照元素分类
- 基本数据类型的元素:存储数据值
- 引用数据类型的元素:存储对象(本质上存储对象的首地址)(这个在面向对象部分讲解)
注意:无论数组的元素是基本数据类型还是引用数据类型,数组本身都是引用数据类型
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 2
| String[] cars = {"Volvo", "BMW", "Ford", "Mazda"}; int[] myNum = {10, 20, 30, 40};
|
- 先指定长度,后续再插入值
1 2 3 4 5 6 7 8
| 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 2
| String[] cars = {"Volvo", "BMW", "Ford", "Mazda"}; cars[0] = "Opel";
|
- 访问数组元素 - 您可以通过引用索引号来访问数组元素。
1 2
| String[] cars = {"Volvo", "BMW", "Ford", "Mazda"}; System.out.println(cars[0]);
|
- 获取数组的长度 - 要知道数组有多少个元素,可以使用 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]);
|
1 2 3
| int[][] myNumbers = { {1, 2, 3}, {4, 5, 6} }; myNumbers[1][2] = 9; System.out.println(myNumbers[1][2]);
|
- 我们也可以在另一个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]); } } } }
|