1. 数组的定义

数组的定义一共有 4 种方式,具体如下:

  1. // 第1种: 定义数组变量,然后初始化
  2. int[] nums;
  3. nums = new int[3];
  4. // 第2种: 直接定义并初始化
  5. int[] nums = new int[3];
  6. // 第3种: 直接定义和初始化,并赋值
  7. int[] nums = {1, 2, 3};
  8. // 第4种: 直接定义和初始化,并赋值
  9. int[] nums = new int[]{1, 2, 3};

💡所有已经初始化但并未进行赋值的数组,其元素会有默认值,如果是int数组,默认值为 0。

2. 元素的赋值/引用

数组的下标是从 0 开始的,下面示例对数组的元素进行赋值:

  1. int[] nums = new int[3];
  2. nums[0] = 1;
  3. nums[1] = 2;
  4. nums[2] = 3;

💡如果只是定义了数组,但并未对其初始化,它是不可以被赋值的。

数组元素的引用也非常简单:

  1. System.out.println(nums[1]);

💡数组的赋值和引用均不能越界

3. 数组的属性

所有初始化后的数组都会具备一个length属性,表示数组的长度。

  1. int[] nums = new int[3];
  2. System.out.println(nums.length); // 3

4. 数组的性质

数组具备以下特性:

  • 一旦创建,长度不可以改变
  • 每个位置只能存储一个值
  • 数组创建后会有默认值,分别为:
    • 对于intbyteshortlong类型的数组,默认值为 0
    • 对于floatdouble类型的数组,默认值为 0.0
    • 对于char类型的数组,默认值为\u0000
    • 对于boolean类型的数组,默认值为false
    • 对于String类型的数组,默认值为null
  • 索引下标从 0 开始,不可以越界
  • 初始化后的数组具备length属性
  • 数组中元素可以是基本类型,也可以是引用类型

    5. 数组的遍历

    数组的遍历一共有 2 种方式,第一种方式为循环(forwhile)+数组元素的引用,第二种则是之前介绍过的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]); }

  1. `foreach`方式更为简单,直接上示例:
  2. ```java
  3. int[] nums = {1, 2, 3, 4, 5};
  4. for (int num: nums) {
  5. System.out.println(num);
  6. }

学会了数组的遍历,结合之前所需的控制语句,我们就可以进行数组元素的查找输出最大最小值数组元素的位移数组的扩容以及数组的反转等。

5.1 查找指定元素

通过遍历+**if**条件判断的组合,非常容易地可以获知指定元素是否存在于数组中。

  1. public class LookupArrayElement {
  2. public static void main(String[] args) {
  3. int[] nums = {1, 2, 3, 4, 5};
  4. int target = 3;
  5. for (int num: nums) {
  6. if (num == target) {
  7. System.out.println("You found the element!");
  8. break;
  9. }
  10. }
  11. }
  12. }

5.2 查找最大值/最小值

查找数组中最大/最小值,寻找最大值的过程可以解释为,先将最大值maxValue设定为数组中第一个元素,随后通过遍历数组元素的方式,如果所访问的元素比当前maxValue更大,则更新maxValue为该元素值。同理,最小值也是这样寻找。

  1. public class MaxArrayElement {
  2. public static void main(String[] args) {
  3. int[] nums = {2, 1, 2, 3, 4, 5};
  4. int maxValue = nums[0];
  5. int minValue = nums[0];
  6. for (int num: nums) {
  7. if (num > maxValue) {
  8. maxValue = num;
  9. } else if (num < minValue) {
  10. minValue = num;
  11. }
  12. }
  13. System.out.println("Max Value is " + maxValue);
  14. System.out.println("Min Value is " + minValue);
  15. }
  16. }

5.3 数组元素的位移

实现数组元素的交换,这个操作在很多语言中非常容易,比如 Python 中交换列表中两个元素的位置:

  1. lst = [1, 2, 3]
  2. lst[0], lst[1] = lst[1], lst[0]

但是 Java 中实现这样的逻辑,我们需要借助中间变量临时存储:

  1. int[] nums = {1, 2, 3, 4, 5};
  2. int temp = nums[0];
  3. nums[0] = nums[1];
  4. nums[1] = temp;

5.4 数组的扩容

之前我们提到过,数组一旦创建后,其长度是不可以改变的,受到上面数组元素位移的启发,我们也可以实现数组的扩容:

  1. int[] nums = {1, 2, 3, 4, 5};
  2. int[] temp = new int[nums.length * 2];
  3. nums = temp;
  4. System.out.println(nums.length); // 10

5.5 数组的反转

数组的反转即得到一个顺序完全相反的数组,实现方式一般有 2 种。第一种是创建一个等长的新数组,将原先数组元组倒序引用:

  1. int[] nums = {1, 2, 3, 4, 5};
  2. int[] newNums = new int[nums.length];
  3. for (int i = 0; i < nums.length; i++) {
  4. newNums[i] = nums[nums.length - 1 - i]
  5. }

第二种方式则是采用数组元素交换的方式,先交换第一个元素和最后一个元素的位置,接着交换第二个元素和倒数第二个元素的位置,依次类推。

  1. int[] nums = {1, 2, 3, 4, 5};
  2. for (int i = 0; i < nums.length / 2; i++) {
  3. int temp = nums[i];
  4. nums[i] = nums[nums.length - 1 -i];
  5. nums[nums.length - 1 -i] = temp;
  6. }

二维数组