1. 数组的定义
数组的定义一共有 4 种方式,具体如下:
// 第1种: 定义数组变量,然后初始化
int[] nums;
nums = new int[3];
// 第2种: 直接定义并初始化
int[] nums = new int[3];
// 第3种: 直接定义和初始化,并赋值
int[] nums = {1, 2, 3};
// 第4种: 直接定义和初始化,并赋值
int[] nums = new int[]{1, 2, 3};
💡所有已经初始化但并未进行赋值的数组,其元素会有默认值,如果是
int
数组,默认值为 0。
2. 元素的赋值/引用
数组的下标是从 0 开始的,下面示例对数组的元素进行赋值:
int[] nums = new int[3];
nums[0] = 1;
nums[1] = 2;
nums[2] = 3;
💡如果只是定义了数组,但并未对其初始化,它是不可以被赋值的。
数组元素的引用也非常简单:
System.out.println(nums[1]);
💡数组的赋值和引用均不能越界
3. 数组的属性
所有初始化后的数组都会具备一个length
属性,表示数组的长度。
int[] nums = new int[3];
System.out.println(nums.length); // 3
4. 数组的性质
数组具备以下特性:
- 一旦创建,长度不可以改变
- 每个位置只能存储一个值
- 数组创建后会有默认值,分别为:
- 对于
int
、byte
、short
、long
类型的数组,默认值为 0 - 对于
float
、double
类型的数组,默认值为 0.0 - 对于
char
类型的数组,默认值为\u0000
- 对于
boolean
类型的数组,默认值为false
- 对于
String
类型的数组,默认值为null
- 对于
- 索引下标从 0 开始,不可以越界
- 初始化后的数组具备
length
属性 - 数组中元素可以是基本类型,也可以是引用类型
5. 数组的遍历
数组的遍历一共有 2 种方式,第一种方式为循环(for
或while
)+数组元素的引用,第二种则是之前介绍过的foreach
方式。 ```java int[] nums = {1, 2, 3, 4, 5};
// for 循环方式 for (int i = 0; i < num.length; i++) { System.out.println(nums[i]); }
// while 循环方式 int j = 0; while (j < nums.length) { System.out.println(nums[j]); }
`foreach`方式更为简单,直接上示例:
```java
int[] nums = {1, 2, 3, 4, 5};
for (int num: nums) {
System.out.println(num);
}
学会了数组的遍历,结合之前所需的控制语句,我们就可以进行数组元素的查找、输出最大最小值、数组元素的位移、数组的扩容以及数组的反转等。
5.1 查找指定元素
通过遍历+**if**
条件判断的组合,非常容易地可以获知指定元素是否存在于数组中。
public class LookupArrayElement {
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4, 5};
int target = 3;
for (int num: nums) {
if (num == target) {
System.out.println("You found the element!");
break;
}
}
}
}
5.2 查找最大值/最小值
查找数组中最大/最小值,寻找最大值的过程可以解释为,先将最大值maxValue
设定为数组中第一个元素,随后通过遍历数组元素的方式,如果所访问的元素比当前maxValue
更大,则更新maxValue
为该元素值。同理,最小值也是这样寻找。
public class MaxArrayElement {
public static void main(String[] args) {
int[] nums = {2, 1, 2, 3, 4, 5};
int maxValue = nums[0];
int minValue = nums[0];
for (int num: nums) {
if (num > maxValue) {
maxValue = num;
} else if (num < minValue) {
minValue = num;
}
}
System.out.println("Max Value is " + maxValue);
System.out.println("Min Value is " + minValue);
}
}
5.3 数组元素的位移
实现数组元素的交换,这个操作在很多语言中非常容易,比如 Python 中交换列表中两个元素的位置:
lst = [1, 2, 3]
lst[0], lst[1] = lst[1], lst[0]
但是 Java 中实现这样的逻辑,我们需要借助中间变量临时存储:
int[] nums = {1, 2, 3, 4, 5};
int temp = nums[0];
nums[0] = nums[1];
nums[1] = temp;
5.4 数组的扩容
之前我们提到过,数组一旦创建后,其长度是不可以改变的,受到上面数组元素位移的启发,我们也可以实现数组的扩容:
int[] nums = {1, 2, 3, 4, 5};
int[] temp = new int[nums.length * 2];
nums = temp;
System.out.println(nums.length); // 10
5.5 数组的反转
数组的反转即得到一个顺序完全相反的数组,实现方式一般有 2 种。第一种是创建一个等长的新数组,将原先数组元组倒序引用:
int[] nums = {1, 2, 3, 4, 5};
int[] newNums = new int[nums.length];
for (int i = 0; i < nums.length; i++) {
newNums[i] = nums[nums.length - 1 - i]
}
第二种方式则是采用数组元素交换的方式,先交换第一个元素和最后一个元素的位置,接着交换第二个元素和倒数第二个元素的位置,依次类推。
int[] nums = {1, 2, 3, 4, 5};
for (int i = 0; i < nums.length / 2; i++) {
int temp = nums[i];
nums[i] = nums[nums.length - 1 -i];
nums[nums.length - 1 -i] = temp;
}