📋 目录
一、工具类功能
数组的常用动作一个类接住:判空、基本类型与包装类型互转、包含判断、多数组合并、原地反转、极值与求和均值、可读字符串输出,求和以 long 返回不会溢出。
二、所需环境
JDK 17或以上
三、方法与调用示例(按需调用)
🔢 方法序号:1
🎯 方法用途:
- 判对象数组是否为空,null 与长度为 0 都算空
- 入参可能是 null 数组的接口做前置校验时用
🧩 方法定义:public static boolean isEmpty(Object[] array)
🗣️ 入参解释:public static boolean isEmpty(对象数组)
📤 返回值解释:boolean,为 null 或没有元素返回 true
💡 边界口径:
- 对 null 安全,不抛异常,与其余方法「null 数组就报错」的口径不同
- 有元素即为 false,不管元素本身是不是 null
- 与
isEmpty(int[])重载同名,直接写isEmpty(null)编译期会报「引用不明确」,要显式转型
🧪 方法示例:
isEmpty((Object[]) null)拿到true- 空数组与装满 null 的数组分别拿到
true和false
🔢 方法序号:2
🎯 方法用途:
- 判
int[]是否为空,基本类型数组版 - 统计、批处理里拿着
int[]流转时的判空入口
🧩 方法定义:public static boolean isEmpty(int[] array)
🗣️ 入参解释:public static boolean isEmpty(int数组)
📤 返回值解释:boolean,为 null 或长度为 0 返回 true
💡 边界口径:
- 与对象数组版语义相同,只是不接收对象数组
new int[0]与null都算空
🧪 方法示例:
isEmpty(new int[0])拿到true,isEmpty(null)转型后也是true- 五个元素的数组拿到
false
🔢 方法序号:3
🎯 方法用途:
- 判对象数组非空,写正向条件时少一个取反
- 断言「必须有数据」的入口用它比
!isEmpty更直读
🧩 方法定义:public static boolean isNotEmpty(Object[] array)
🗣️ 入参解释:public static boolean isNotEmpty(对象数组)
📤 返回值解释:boolean,非 null 且有元素返回 true
💡 边界口径:
- 与
isEmpty(Object[])完全相反,null 返回false - 同样对 null 安全
🧪 方法示例:
isNotEmpty(values)拿到true,与判空结果相反
🔢 方法序号:4
🎯 方法用途:
- 判
int[]非空,基本类型数组版 - 批量 id、分数数组这类场景的正向判断
🧩 方法定义:public static boolean isNotEmpty(int[] array)
🗣️ 入参解释:public static boolean isNotEmpty(int数组)
📤 返回值解释:boolean,非 null 且长度大于 0 返回 true
💡 边界口径:
- 与
isEmpty(int[])相反,null 返回false - 全 0 的数组算非空,长度才是唯一依据
🧪 方法示例:
isNotEmpty(scores)拿到trueisNotEmpty(new int[0])拿到false,长度为零就是空
🔢 方法序号:5
🎯 方法用途:
- 把
int[]打成Integer[],元素一一对应 - 要喂给只收对象数组的 API、或者要当
Arrays.asList参数时用
🧩 方法定义:public static Integer[] toBoxed(int[] array)
🗣️ 入参解释:public static Integer[] toBoxed(int数组)
📤 返回值解释:Integer[],与原数组等长的装箱数组
💡 边界口径:
- 不做零值处理,位置严格对应
- 数组为 null 抛
IllegalArgumentException,消息是「数组不能为null」 - 返回新数组,与原数组不共享
🧪 方法示例:
toBoxed(new int[]{2, 5, 1, 7, 3})拿到[2, 5, 1, 7, 3]toBoxed(null)抛数组不能为null
🔢 方法序号:6
🎯 方法用途:
- 把
long[]打成Long[] - 金额分值、时间戳数组要交给泛型集合时用
🧩 方法定义:public static Long[] toBoxed(long[] array)
🗣️ 入参解释:public static Long[] toBoxed(long数组)
📤 返回值解释:Long[],装箱后的新数组
💡 边界口径:
- 与 int 版同一口径,元素一一对应
- 数组为 null 抛
IllegalArgumentException
🧪 方法示例:
toBoxed(new long[]{1000, 20000, 350})拿到[1000, 20000, 350]
🔢 方法序号:7
🎯 方法用途:
- 把
double[]打成Double[] - 比例、评分这类浮点数组要进泛型容器时用
🧩 方法定义:public static Double[] toBoxed(double[] array)
🗣️ 入参解释:public static Double[] toBoxed(double数组)
📤 返回值解释:Double[],装箱后的新数组
💡 边界口径:
- 元素一一对应,0.0 与 -0.0 都按原值装箱
- 数组为 null 抛
IllegalArgumentException
🧪 方法示例:
toBoxed(new double[]{0.85, 1.0, 0.0})拿到[0.85, 1.0, 0.0]
🔢 方法序号:8
🎯 方法用途:
- 把
Integer[]拆成int[],null 元素补成 0 - 数组打平、要把包装数组交给按原始类型算的接口时用
🧩 方法定义:public static int[] toPrimitive(Integer[] array)
🗣️ 入参解释:public static int[] toPrimitive(Integer数组)
📤 返回值解释:int[],拆箱后的新数组
💡 边界口径:
null元素转成该类型零值,这里不会抛 NPE- 需要区分「缺失」与「零值」时别用这个方法,保留包装类型或走
OptionalInt - 数组本身为 null 抛
IllegalArgumentException
🧪 方法示例:
toPrimitive(new Integer[]{1001, 1002, null, 1003})拿到[1001, 1002, 0, 1003],第 3 个 null 被补成 0toPrimitive((Integer[]) null)抛数组不能为null
🔢 方法序号:9
🎯 方法用途:
- 把
Long[]拆成long[],null 元素补 0L - 时间戳、分值数组打平时用
🧩 方法定义:public static long[] toPrimitive(Long[] array)
🗣️ 入参解释:public static long[] toPrimitive(Long数组)
📤 返回值解释:long[],拆箱后的新数组
💡 边界口径:
- 零值是
0L,与 int 版同一套约定 - 数组为 null 抛
IllegalArgumentException
🧪 方法示例:
toPrimitive(boxedLongs)拿到[1000, 20000, 350]
🔢 方法序号:10
🎯 方法用途:
- 把
Double[]拆成double[],null 元素补 0.0 - 浮点数组要交给统计、算法接口时用
🧩 方法定义:public static double[] toPrimitive(Double[] array)
🗣️ 入参解释:public static double[] toPrimitive(Double数组)
📤 返回值解释:double[],拆箱后的新数组
💡 边界口径:
- 零值是
0.0,NaN元素会原样保留 - 数组为 null 抛
IllegalArgumentException
🧪 方法示例:
toPrimitive(boxedDoubles)拿到[0.85, 1.0, 0.0]
🔢 方法序号:11
🎯 方法用途:
- 在对象数组里按
equals找元素,允许传不同类型 - 小数组判存在、不想先转
Set时用
🧩 方法定义:public static <T> boolean contains(T[] array, Object element)
🗣️ 入参解释:public static <T> boolean contains(对象数组, 待找元素)
📤 返回值解释:boolean,找到返回 true
💡 边界口径:
- 比较用
element.equals(数组元素),所以null也能作为待找元素 - 不做类型强转,类型对不上只会判
false - 数组为 null 抛
IllegalArgumentException
🧪 方法示例:
contains(ids, 1002)拿到true,按Integer的equals命中contains(ids, null)拿到true,数组里那个 null 位被认出来了- 找不存在的元素拿到
false,数组传 null 抛数组不能为null
🔢 方法序号:12
🎯 方法用途:
- 在
int[]里按值找元素,不产生装箱开销 - 打分、状态码这类小数组的存在性判断用这一版
🧩 方法定义:public static boolean contains(int[] array, int value)
🗣️ 入参解释:public static boolean contains(int数组, 值)
📤 返回值解释:boolean,找到返回 true
💡 边界口径:
- 逐个比较基本类型值,不涉及
equals - 数组为 null 抛
IllegalArgumentException - 线性查找,数组大了该换集合
🧪 方法示例:
contains(scores, 7)拿到truecontains(scores, 9)拿到false
🔢 方法序号:13
🎯 方法用途:
- 把多数组合并成一个新数组,不与任何入参共享
- 分页结果拼接、多来源标签合并这类动作用它
🧩 方法定义:public static <T> T[] concat(T[]... arrays)
🗣️ 入参解释:public static <T> T[] concat(若干数组)
📤 返回值解释:T[],合并后的新数组
💡 边界口径:
- 组件类型取自第一个非空入参数组,全是空数组时取自 varargs 的组件类型
- 混合父子类型数组时,后续元素可能与组件类型不兼容而抛
ArrayStoreException - 数组项为 null 抛
IllegalArgumentException,消息点出是第几个 - 一个数组都不给同样抛异常
🧪 方法示例:
concat(first, second)拿到长度 3,内容 [1, 2, 3]- 第一个入参是空数组时,结果组件类型拿到
Integer - 合并列表里有一项是 null,抛
待合并数组第2个为null - 一个数组都没给,抛
待合并数组至少需要提供一个数组
🔢 方法序号:14
🎯 方法用途:
- 原地反转
int[],不新建数组 - 要省内存、且这个数组归当前流程独用时用
🧩 方法定义:public static void reverse(int[] array)
🗣️ 入参解释:public static void reverse(int数组)
📤 返回值解释:void,改动直接落在入参数组上
💡 边界口径:
- 原地修改,调用方持有的引用会看到同一份改动
- 数组为 null 抛
IllegalArgumentException - 长度 0 或 1 时什么都不做
🧪 方法示例:
reverse(scores)之后原数组拿到[3, 7, 1, 5, 2],反转前是[2, 5, 1, 7, 3]
🔢 方法序号:15
🎯 方法用途:
- 原地反转对象数组,泛型版
- 倒序展示、消息列表反转这类不改元素内容的场合用
🧩 方法定义:public static <T> void reverse(T[] array)
🗣️ 入参解释:public static <T> void reverse(对象数组)
📤 返回值解释:void,入参数组被就地改完
💡 边界口径:
- 只动位置不动元素,null 元素照样跟着换位
- 数组为 null 抛
IllegalArgumentException - 与其他线程共享同一数组时,顺序要调用方自己保证
🧪 方法示例:
reverse(ids)之后拿到[1003, null, 1002, 1001],null 元素也参与了换位
🔢 方法序号:16
🎯 方法用途:
- 求
int[]的最大值 - 评分、库存这类数组取峰值时用,空数组不当 0 处理而是直接报错
🧩 方法定义:public static int max(int[] array)
🗣️ 入参解释:public static int max(int数组)
📤 返回值解释:int,数组里的最大值
💡 边界口径:
- 空数组抛
IllegalArgumentException,不会静默返回 0 或Integer.MIN_VALUE - 数组为 null 同样抛异常
- 只有
int[]一套,long[]、double[]请自己走LongStream、DoubleStream
🧪 方法示例:
max(scores)拿到7max(new int[0])抛数组长度必须大于0
🔢 方法序号:17
🎯 方法用途:
- 求
int[]的最小值 - 价格、延迟数组取谷底时用
🧩 方法定义:public static int min(int[] array)
🗣️ 入参解释:public static int min(int数组)
📤 返回值解释:int,数组里的最小值
💡 边界口径:
- 空数组抛
IllegalArgumentException,与max一致 - 全负数数组给的是最负的那个
- 同样只提供
int[]版本
🧪 方法示例:
min(scores)拿到1min(new int[0])抛数组长度必须大于0
🔢 方法序号:18
🎯 方法用途:
- 求
int[]的和,以long返回 - 上千个 int 相加不想溢出成负数时用这一版
🧩 方法定义:public static long sum(int[] array)
🗣️ 入参解释:public static long sum(int数组)
📤 返回值解释:long,累加结果
💡 边界口径:
- 累加在
long上做,两个Integer.MAX_VALUE相加也得到正数 - 空数组返回 0,与
max、min直接报错不同 - 需要回到
int自己确认量级
🧪 方法示例:
sum(scores)拿到18sum(new int[]{Integer.MAX_VALUE, Integer.MAX_VALUE})拿到4294967294,没溢出成负数sum(new int[0])拿到0
🔢 方法序号:19
🎯 方法用途:
- 求
int[]的平均值,以double返回且不做四舍五入 - 平均分、均值指标这类要小数精度的场景用
🧩 方法定义:public static double average(int[] array)
🗣️ 入参解释:public static double average(int数组)
📤 返回值解释:double,平均值,保留小数
💡 边界口径:
- 空数组抛
IllegalArgumentException,不会返回 0 或NaN - 先求和再除,求和走
long,不会因为元素多而溢出 - 要展示几位小数由调用方自己格式化
🧪 方法示例:
average(scores)拿到3.6,五个数相加除以 5 没被截成 3average(new int[0])抛数组长度必须大于0
🔢 方法序号:20
🎯 方法用途:
- 把
int[]转成[a, b, c]形态的可读字符串 - 写日志、拼告警文案时用,null 数组也有明确输出
🧩 方法定义:public static String toString(int[] array)
🗣️ 入参解释:public static String toString(int数组)
📤 返回值解释:String,带方括号与逗号的数组文本
💡 边界口径:
- 数组为 null 返回字面量
null,不抛异常 - 输出内容与
Arrays.toString(int[])一致,是文本不是 JSON - 空数组给
[]
🧪 方法示例:
toString(scores)拿到[2, 5, 1, 7, 3]toString(null)拿到字面量null
四、工具类源码(可直接复制)
📦 源码文件