Java Arrays
类详解
Arrays
是 Java 中一个专门用于操作数组的工具类,位于 java.util
包中。它提供了多种用于数组操作的方法,例如排序、搜索、填充、比较、转换等。
1. 常用方法分类
1.1 排序
方法 | 描述 |
---|---|
Arrays.sort(array) | 对数组进行升序排序(适用于基本类型和对象类型)。 |
Arrays.sort(array, Comparator) | 按照指定的比较器对数组进行排序(适用于对象数组)。 |
Arrays.parallelSort(array) | 使用多线程对数组进行排序(适用于基本类型和对象类型)。 |
示例:
import java.util.Arrays;public class ArraysSortExample {public static void main(String[] args) {int[] nums = {5, 3, 8, 1, 2};Arrays.sort(nums);System.out.println(Arrays.toString(nums)); // [1, 2, 3, 5, 8]String[] names = {"Tom", "Alice", "Bob"};Arrays.sort(names);System.out.println(Arrays.toString(names)); // [Alice, Bob, Tom]Arrays.sort(names, (a, b) -> b.compareTo(a)); // 按字母倒序System.out.println(Arrays.toString(names)); // [Tom, Bob, Alice]}
}
1.2 搜索
方法 | 描述 |
---|---|
Arrays.binarySearch(array, key) | 在排序数组中使用二分搜索查找 key ,返回索引。 |
- 数组必须先排序,才能使用
binarySearch
。 - 如果找到元素,返回其索引;否则,返回负值(插入点的负索引减 1)。
示例:
import java.util.Arrays;public class ArraysSearchExample {public static void main(String[] args) {int[] nums = {1, 2, 3, 5, 8};System.out.println(Arrays.binarySearch(nums, 3)); // 2System.out.println(Arrays.binarySearch(nums, 4)); // -4(插入点为索引 3)}
}
1.3 复制
方法 | 描述 |
---|---|
Arrays.copyOf(array, newLength) | 复制数组到一个新数组,指定长度。 |
Arrays.copyOfRange(array, from, to) | 复制数组的指定范围 [from, to) 。 |
示例:
import java.util.Arrays;public class ArraysCopyExample {public static void main(String[] args) {int[] nums = {1, 2, 3, 4, 5};int[] copy = Arrays.copyOf(nums, 3); // 复制前 3 个元素System.out.println(Arrays.toString(copy)); // [1, 2, 3]int[] rangeCopy = Arrays.copyOfRange(nums, 2, 4); // 复制索引 2 到 4 的元素System.out.println(Arrays.toString(rangeCopy)); // [3, 4]}
}
1.4 填充
方法 | 描述 |
---|---|
Arrays.fill(array, value) | 用 value 填充整个数组。 |
Arrays.fill(array, from, to, value) | 用 value 填充数组的 [from, to) 范围。 |
示例:
import java.util.Arrays;public class ArraysFillExample {public static void main(String[] args) {int[] nums = new int[5];Arrays.fill(nums, 10); // 用 10 填充整个数组System.out.println(Arrays.toString(nums)); // [10, 10, 10, 10, 10]Arrays.fill(nums, 1, 4, 20); // 填充索引 1 到 4System.out.println(Arrays.toString(nums)); // [10, 20, 20, 20, 10]}
}
1.5 比较
方法 | 描述 |
---|---|
Arrays.equals(array1, array2) | 比较两个数组是否相等(包括顺序和内容)。 |
Arrays.deepEquals(array1, array2) | 比较多维数组是否相等。 |
示例:
import java.util.Arrays;public class ArraysEqualsExample {public static void main(String[] args) {int[] nums1 = {1, 2, 3};int[] nums2 = {1, 2, 3};int[] nums3 = {3, 2, 1};System.out.println(Arrays.equals(nums1, nums2)); // trueSystem.out.println(Arrays.equals(nums1, nums3)); // falseint[][] multi1 = {{1, 2}, {3, 4}};int[][] multi2 = {{1, 2}, {3, 4}};System.out.println(Arrays.deepEquals(multi1, multi2)); // true}
}
1.6 转换
方法 | 描述 |
---|---|
Arrays.toString(array) | 将一维数组转换为字符串表示。 |
Arrays.deepToString(array) | 将多维数组转换为字符串表示。 |
示例:
import java.util.Arrays;public class ArraysToStringExample {public static void main(String[] args) {int[] nums = {1, 2, 3};System.out.println(Arrays.toString(nums)); // [1, 2, 3]int[][] multi = {{1, 2}, {3, 4}};System.out.println(Arrays.deepToString(multi)); // [[1, 2], [3, 4]]}
}
1.7 流操作
方法 | 描述 |
---|---|
Arrays.stream(array) | 将数组转换为流(Stream ),适合配合流操作使用。 |
示例:
import java.util.Arrays;public class ArraysStreamExample {public static void main(String[] args) {int[] nums = {1, 2, 3, 4, 5};int sum = Arrays.stream(nums).sum(); // 求和System.out.println(sum); // 15long count = Arrays.stream(nums).filter(x -> x % 2 == 0).count(); // 统计偶数个数System.out.println(count); // 2}
}
2. 注意事项
-
多维数组比较与操作:
Arrays.equals
只能比较一维数组。- 对多维数组,需要使用
Arrays.deepEquals
或Arrays.deepToString
。
-
性能优化:
Arrays.parallelSort
适合大数组的排序,能够利用多核 CPU。
-
数组是固定大小:
- 数组的大小固定,如果需要动态调整大小,请使用集合类(如
ArrayList
)。
- 数组的大小固定,如果需要动态调整大小,请使用集合类(如
3. 常见使用场景
-
排序和二分查找:
- 使用
Arrays.sort
排序后,再用Arrays.binarySearch
快速查找。
- 使用
-
数组初始化:
- 用
Arrays.fill
快速填充数组,避免手动初始化。
- 用
-
数组转换:
- 将数组转换为字符串输出,用于调试和日志。
-
流式操作:
- 使用
Arrays.stream
对数组进行复杂操作,如过滤、映射和归约。
- 使用
总结
Arrays
类提供了丰富的工具方法,极大地简化了对数组的操作。在实际开发中,特别是涉及排序、搜索和初始化等操作时,它是非常常用且高效的工具类。