# 数组相关操作
java.util.Arrays
Java JDK 在 java.util 包下提供了一个 Arrays 工具类,用于对数组的各种常见操作。
org.springframework.util.ObjectUtils
Spring 框架在 org.springframework.util 包下提供了一个 ObjectUtils 工具类。虽然,它不是专用于数组的工具类,但是其中有几个方法可用于数据。
# 1. 数组判断空
isArray 方法
是否是数组
isArray 方法来源于 Spring 框架的 ObjectUtils 工具类。
public static boolean isArray(Object obj)
伪代码示例如下:
isArray(null) = false isArray([]) = true isArray([1,2,3]) = true
isEmpty 方法
数组判空
isEmpty 方法来源于 Spring 框架的 ObjectUtils 工具类。
public static boolean isEmpty(Object array) public static boolean isEmpty(Object[] array)
伪代码示例如下:
isEmpty(null) = true isEmpty([]) = true isEmpty([1,2,3]) = false
# 2. 数组的内容查询
binarySearch 方法
二分查找
binarySearch 方法来自于 java.util.Arrays 工具类。
使用它有前提:要求数组是有序的。
public static int binarySearch(int[] a, int key) public static int binarySearch(long[] a, int key) ...
binarySearch 方法的返回值是元素在数组中的索引值。
binarySearch([0,1,2,3,4,5], 3) = 3 binarySearch([5,4,3,2,1,0], 3) = 2
containsElement 方法
是否包含 xxx
containsElement 方法来源于 Spring 框架的 ObjectUtils 工具类。
public static boolean containsElement(Object[] array, Object element)
它只能用于对象数组,而不能用于基本类型数组。
containsElement([1,2,3], 1) = true containsElement([1,2,3], 4) = false containsElement([1,2,3], null)= false
# 3. 填充与拷贝
addObjectToArray 方法
添加
addObjectToArray 方法来自于 Spring 框架的 ObjectUtils 工具类。
向数组的末尾 “追加” 新元素。这里的 “追加” 是假追加,原数组并没有发生变化(也不可能发生变化),这里返回的是一个新数组。
// 向参数数组的末尾追加新元素,并返回一个新数组。 <A, O extends A> A[] addObjectToArray(A[] array, O obj)
fill 方法
填充(赋值)
fill 方法来源于 JDK 自带的 Arrays 工具类。
public static void fill(int[] a, int val) public static void fill(int[] a, int fromIndex, int toIndex, int val); ... public static void fill(long[] a, long val) public static void fill(long[] a, int fromIndex, int toIndex, long val); ...
fill 方法改变的是原数组。
fromIndex 和 toIndex 是一个左闭右开区间:
[fromIndex, toIndex)
。伪代码示例:
fill([1,2,3], 4) = [4, 4, 4] fill([1,2,3], 1, 2, 4) = [1, 4, 3]
copyOf / copyOfRange 方法
拷贝
copyOf / copyOfRange 方法来源于 JDK 自带的 Arrays 工具类。
public static int[] copyOf(int[] original, int newLength) public static long[] copyOf(long[] original, int newLength) ... public static int[] copyOfRange(int[] original, int from, int to) public static long[] copyOfRange(long[] original, int from, int to) ...
from 和 to 是一个左闭右开的区间:[from, to) 。
Arrays.copyOf([0,1,2,3,4], 2)) = [0, 1] Arrays.copyOfRange([0,1,2,3,4], 2, 4)) = [2, 3]
# 4. 数组转换
asList / arrayToList 方法
转成 List
asList 方法来源于 JDK 自带的 Arrays 工具类。
由给定的数组 a ,返回一个固定大小的 List 对象。
public static <T> List<T> asList(T... a);
这里返回的 ArrayList 并不是
java.util.ArrayList
,而是 Arrays 的内部类 ArrayList 。它不支持 add 和 remove 的操作,是只读的。另外,当改变原数组中的元素时,这个 ArrayList 会 “自动” 随之变化。逻辑上,这里返回的 ArrayList 对象是数组的一个 “视图” 。
伪代码示例如下:
asList([1,2,3]) = [1,2,3]
转成 List
Spring 框架中的 CollectionUtils 的 arrayToList 方法也能实现数组转集合的功能。
List arrayToList(Object source)
toString / deepToString 方法
转成 String
toString / deepToString 方法来自于 JDK 自带的 Arrays 工具类。
public static String toString(int[] a) public static String toString(long[] a) ... // 可用于二维数组 public static String deepToString(int[] a); public static String deepToString(long[] a); ...
伪代码示例如下:
toString(null) = "null" toString([1]) = "[1]" toString([1,2,3]) = "[1, 2, 3]" deepToString(null) = "null" deepToString([[1,2],[3,4]]) = "[[1, 2], [3, 4]]"
toObjectArray 方法
基本类型数组转包装类数组
// 原生基础类型数组 --> 包装类数组 Object[] toObjectArray(Object source)
# 5. 排序
sort 方法
排序
sort 方法来源于 JDK 自带的 Arrays 工具类。
public static void sort(int[] a)
sort 方法改变的是原数组(源数组)。
伪代码示例如下:
sort(null) = NPE sort([4,3,2,1,0]) = [0,1,2,3,4]