一、概念
在 Java 中,数组是一种用于存储固定大小的同类型元素的容器。数组中的每一个元素都可以通过一个索引进行访问,索引是从 0 开始的整数。数组在内存中是连续存储的,这使得访问和操作数组元素非常高效。
二、声明数组
首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:
样例
int[] myArr; // 首选方式
或
int myArr[]; // 效果相同,但不是首选方式
注: 建议使用 int[] myArr 的声明风格声明数组变量。 int myArr[] 风格是来自 C/C++ 语言 ,在Java中采用是为了让 C/C++ 程序员能够快速理解java语言。
三、创建数组
在Java程序中,创建数组可以分为两种方式,一种是静态初始化,另一种是动态初始化。
静态初始化:是指在创建数组的同时,明确地给出数组的元素值。这种初始化方式在编译时就能确定数组的大小和内容。
有两种书写格式,具体如下:
public class Main {
public static void main(String[] args) {
// 完整格式
int[] arr1 = new int[]{1, 2, 3, 4, 5};
// 简写格式 (推荐)
int[] arr2 = {1, 2, 3, 4, 5};
}
}
动态初始化:指在创建数组时,只指定数组的大小,而不立即提供元素的值。数组的元素在运行时被赋值。
public class Main {
public static void main(String[] args) {
// 格式
int[] numbers = new int[5];
numbers[0] = 1;
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;
}
}
一般用 for 循环来初始化。
四、数组长度
数组的长度是固定的,可以通过 length
属性获取。
样例:
public class Main {
public static void main(String[] args) {
int[] arr = new int[5];
System.out.println("数组的长度:" + arr.length);
}
}
运行结果:
数组的长度:5
五、遍历数组
可以通过循环遍历数组中的元素,得到数组元素和下标。
有两种方式,具体如下:
public class Main {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
// for 循环
System.out.println("====== for 循环 ======");
for (int i = 0; i < arr.length; i++) {
System.out.println("arr[" + i + "] = " + arr[i]);
}
// 增强 for 循环
System.out.println("====== 增强 for 循环 ======");
for (int i : arr) {
System.out.println("arr[" + i + "] = " + i);
}
}
}
运行结果:
====== for 循环 ======
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
====== 增强 for 循环 ======
arr[1] = 1
arr[2] = 2
arr[3] = 3
arr[4] = 4
arr[5] = 5
区别:
- for 循环:提供更多的控制,如访问元素索引,可用于更复杂的迭代逻辑。
- 增强 for 循环:代码更简洁,提高了可读性,我们只需要关系数组中的元素而不用关心下标的问题。
增强型 for 循环的设计是为了提高代码的清晰度和减少出错的可能性,尤其在处理集合和数组时。然而,它并不总是适用于所有场景,特别是当循环控制需要更精细的调整时。
六、多维数组
多维数组是数组的数组,最常见的是一维数组和二维数组。
在Java程序中,创建多维数组也可以分为两种方式,一种是静态初始化,另一种是动态初始化。
样例:
public class Main {
public static void main(String[] args) {
// 静态初始化
int[][] arr1 = {
{1,2,3},
{4,5,6},
{7,8,9}
};
// 多态初始化:2行3列,一行三个元素,一共六个元素
int[][] arr2 = new int[2][3];
}
}
七、常用工具
java.util.Arrays
类提供了一系列静态方法,用于操作数组,包括排序、搜索、拷贝、填充和比较等。Arrays 类的方法简化了数组的处理,使得开发者不必手动实现这些常见的数组操作。
数组打印:Arrays.toString(打印的数组)
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 数组
int[] arr = {1, 3, 2, 5, 4};
// 打印数组
System.out.println(Arrays.toString(arr));
}
}
运行结果:
[1, 3, 2, 5, 4]
数组拷贝:Arrays.copyOf(被拷贝的数组,数组的长度)
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 源数组
int[] src = {1, 3, 2, 5, 4};
// 产生的目标数组
int[] copy = Arrays.copyOf(src, src.length);
System.out.println(Arrays.toString(copy));
}
}
数组排序:Arrays.sort(数组);
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 数组
int[] arr = {1, 3, 2, 5, 4};
// 按照升序排序
Arrays.sort(arr);
// 打印结果
System.out.println(Arrays.toString(arr));
}
}
运行结果:
[1, 2, 3, 4, 5]
数组搜索:Arrays.binarySearch(数组, 目标值)
返回的是目标值的下标,数组必须是升序的。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// 数组
int[] arr = {1, 2, 3, 4, 5};
// 按照升序排序
int index = Arrays.binarySearch(arr, 3);
// 打印结果
System.out.println(index);
}
}
运行结果:
2
八、总结
数组是 Java 中用于存储同类型数据的重要数据结构。它们在处理大量数据时提供了快速的访问速度和简单的数据结构。
然而,数组的长度是固定的,一旦创建后无法改变,这在某些需要动态调整大小的场景下可能是个限制。在这种情况下,可以考虑使用 Java 集合框架中的 ArrayList
或其他动态数据结构。