前置知识: Java

Java Arrays 工具类语法速查手册

2 min入门

Java Arrays 工具类语法速查手册 的完整教学讲解。

0. 本节阅读指引(先读这一节)

本篇是「Arrays 工具类」语法速查手册,按需查阅,不必从头精读。

零基础第一遍只读:数组排序、数组转字符串、数组转列表三个最常用操作;其余(搜索、拷贝、填充、比较与哈希、转流)遇到再查。

前置:010 数组详解。

数组排序

基本写法:排序 Arrays.sort(<数组>);

// 对数组进行自然排序
int[] a = {3, 1, 2};
Arrays.sort(a);

基本写法:范围排序 Arrays.sort(<数组>, <起>, <止>);

// 只排序 [1, 3) 范围
Arrays.sort(a, 1, 3);

基本写法:并行排序 Arrays.parallelSort(<数组>);

// 并行排序大数组
Arrays.parallelSort(a);

基本写法:自定义比较器排序 Arrays.sort(<数组>, <比较器>);

// 对象数组自定义排序
String[] s = {"b", "a"};
Arrays.sort(s, Comparator.reverseOrder());

数组搜索

基本写法:二分查找 Arrays.binarySearch(<数组>, <key>);

// 在已排序数组中查找
int idx = Arrays.binarySearch(a, 2);

基本写法:范围查找 Arrays.binarySearch(<数组>, <起>, <止>, <key>);

// 在 [1, 3) 范围查找
int idx = Arrays.binarySearch(a, 1, 3, 2);

数组拷贝

基本写法:拷贝 Arrays.copyOf(<数组>, <新长度>);

// 拷贝并指定新长度
int[] b = Arrays.copyOf(a, 5);

基本写法:范围拷贝 Arrays.copyOfRange(<数组>, <起>, <止>);

// 拷贝 [1, 3) 范围
int[] c = Arrays.copyOfRange(a, 1, 3);

数组填充

基本写法:填充 Arrays.fill(<数组>, <值>);

// 用值填充整个数组
Arrays.fill(a, 0);

基本写法:范围填充 Arrays.fill(<数组>, <起>, <止>, <值>);

// 填充 [1, 3) 范围
Arrays.fill(a, 1, 3, 99);

数组比较与哈希

基本写法:数组相等 Arrays.equals(<数组1>, <数组2>);

// 比较两个数组内容
boolean ok = Arrays.equals(a, b);

基本写法:深度比较 Arrays.deepEquals(<数组1>, <数组2>);

// 多维数组深度比较
boolean ok = Arrays.deepEquals(m1, m2);

基本写法:哈希码 Arrays.hashCode(<数组>);

// 计算数组哈希码
int h = Arrays.hashCode(a);

基本写法:深度哈希 Arrays.deepHashCode(<数组>);

// 多维数组哈希码
int h = Arrays.deepHashCode(m);

数组转字符串

基本写法:转字符串 Arrays.toString(<数组>);

// 一维数组转字符串
String s = Arrays.toString(a); // [1, 2, 3]

基本写法:深度转字符串 Arrays.deepToString(<数组>);

// 多维数组转字符串
String s = Arrays.deepToString(matrix);

数组转流

基本写法:转 Stream Arrays.stream(<数组>);

// 数组转 Stream
IntStream s = Arrays.stream(new int[]{1, 2, 3});

基本写法:范围流 Arrays.stream(<数组>, <起>, <止>);

// 取数组部分转 Stream
IntStream s = Arrays.stream(a, 1, 3);

数组转列表

基本写法:转固定大小列表 Arrays.asList(<元素>...);

// 数组转 List(固定大小,不可增删)
List<String> list = Arrays.asList("a", "b");

基本写法:转可变列表 new ArrayList<>(Arrays.asList(<元素>...));

// 包装为可变 List
List<String> list = new ArrayList<>(Arrays.asList("a", "b"));

数组创建

基本写法:setAll 创建 Arrays.setAll(<数组>, <生成器>);

// 用函数初始化数组
int[] a = new int[5];
Arrays.setAll(a, i -> i * 2);

基本写法:parallelSetAll Arrays.parallelSetAll(<数组>, <生成器>);

// 并行初始化数组
Arrays.parallelSetAll(a, i -> i * i);

基本写法:parallelPrefix Arrays.parallelPrefix(<数组>, <BinaryOperator>);

// 并行前缀计算(累加)
Arrays.parallelPrefix(a, Integer::sum);

数组工具

基本写法:获取数组长度 <数组>.length

// 数组长度属性
int n = a.length;

基本写法:Array.newInstance Array.newInstance(<类型>, <长度>);

// 反射创建数组
Object arr = Array.newInstance(int.class, 5);

基本写法:获取元素 Array.get(<数组>, <索引>);

// 反射获取数组元素
Object e = Array.get(arr, 0);