18. Java 数组操作
在 Java 中,数组操作非常强大且灵活。除了基本的数组复制方法,Java SE 还提供了 java.util.Arrays 类,帮助开发人员轻松执行常见的数组操作,如复制、排序、搜索等。以下是一些常用的方法和示例:
1. 复制数组:copyOfRange()
java.util.Arrays.copyOfRange() 是一种非常方便的数组复制方法,它不仅可以复制整个数组,还可以指定复制的起始和结束范围。
示例:
class ArrayCopyOfDemo {
public static void main(String[] args) {
String[] copyFrom = {
"Affogato", "Americano", "Cappuccino", "Corretto", "Cortado",
"Doppio", "Espresso", "Frappucino", "Freddo", "Lungo", "Macchiato",
"Marocchino", "Ristretto" };
// 使用 copyOfRange 方法复制部分数组
String[] copyTo = java.util.Arrays.copyOfRange(copyFrom, 2, 9);
for (String coffee : copyTo) {
System.out.print(coffee + " ");
}
}
}
输出:
Cappuccino Corretto Cortado Doppio Espresso Frappucino Freddo
copyOfRange()方法的第二个参数是起始索引(包含),第三个参数是结束索引(不包含)。- 该方法的优势在于不需要预先声明目标数组的大小,它会自动为你创建一个合适大小的新数组。
2. 数组排序:sort()
java.util.Arrays.sort() 用于对数组进行升序排序。
示例:
class ArraySortDemo {
public static void main(String[] args) {
int[] numbers = { 5, 3, 8, 1, 4, 2 };
// 对数组进行排序
java.util.Arrays.sort(numbers);
// 打印排序后的数组
System.out.println(java.util.Arrays.toString(numbers));
}
}
输出:
[1, 2, 3, 4, 5, 8]
3. 二分搜索:binarySearch()
java.util.Arrays.binarySearch() 方法可以用来快速在已排序的数组中查找特定值的索引。注意,数组必须先排序。
示例:
class ArrayBinarySearchDemo {
public static void main(String[] args) {
int[] numbers = { 5, 3, 8, 1, 4, 2 };
// 对数组进行排序
java.util.Arrays.sort(numbers);
// 使用二分搜索查找元素
int index = java.util.Arrays.binarySearch(numbers, 4);
System.out.println("Index of 4: " + index);
}
}
输出:
Index of 4: 2
4. 填充数组:fill()
java.util.Arrays.fill() 方法用于填充数组的每个元素,使用指定的值。
示例:
class ArrayFillDemo {
public static void main(String[] args) {
int[] numbers = new int[5];
// 使用 7 填充数组
java.util.Arrays.fill(numbers, 7);
System.out.println(java.util.Arrays.toString(numbers));
}
}
输出:
[7, 7, 7, 7, 7]
5. 数组比较:equals()
java.util.Arrays.equals() 方法可以比较两个数组的内容是否相等(包括顺序和元素)。
示例:
class ArrayEqualsDemo {
public static void main(String[] args) {
int[] array1 = { 1, 2, 3, 4, 5 };
int[] array2 = { 1, 2, 3, 4, 5 };
int[] array3 = { 5, 4, 3, 2, 1 };
// 比较数组是否相等
System.out.println(java.util.Arrays.equals(array1, array2)); // true
System.out.println(java.util.Arrays.equals(array1, array3)); // false
}
}
输出:
true
false
6. 将数组转换为字符串:toString()
java.util.Arrays.toString() 方法将数组转换为字符串形式,数组元素用逗号分隔,整个数组被括在方括号中。
示例:
class ArrayToStringDemo {
public static void main(String[] args) {
String[] copyTo = { "Cappuccino", "Corretto", "Cortado", "Doppio", "Espresso" };
// 将数组转换为字符串
System.out.println(java.util.Arrays.toString(copyTo));
}
}
输出:
[Cappuccino, Corretto, Cortado, Doppio, Espresso]
7. 将数组转换为流:stream()
在 Java 8 中,java.util.Arrays.stream() 方法被引入,允许你将数组转换为流对象,进而使用流操作(如 map、filter 等)处理数组数据。
示例:
class ArrayStreamDemo {
public static void main(String[] args) {
String[] copyTo = { "Cappuccino", "Corretto", "Cortado", "Doppio", "Espresso" };
// 将数组转换为流并打印每个元素
java.util.Arrays.stream(copyTo)
.map(coffee -> coffee + " ")
.forEach(System.out::print);
}
}
输出:
Cappuccino Corretto Cortado Doppio Espresso
总结:
java.util.Arrays 类提供了非常丰富的数组操作方法,它们能够帮助你高效地完成常见的数组任务,比如复制、排序、搜索、比较等。通过这些工具,你可以大大简化代码,提高开发效率。在处理复杂的数组任务时,建议优先考虑使用这些内置方法,而不是自己编写手动操作逻辑。