数组操作
侧边栏壁纸
  • 累计撰写 40 篇文章
  • 累计收到 1 条评论

数组操作

ASN__
2026-07-07 / 0 评论 / 2 阅读 / 正在检测是否收录...

在 Spring Boot 2.7 的企业实际开发中,数组操作主要依赖 Java 标准库java.util.Arrays)和 Spring 框架内置工具类org.springframework.util 包),两者结合基本能覆盖所有场景。

⚙️ 数组操作核心方法速查

操作类型核心方法所属类/库关键说明
排序Arrays.sort(array)java.util.Arrays对数组进行原地升序排序。
二分查找Arrays.binarySearch(array, key)java.util.Arrays必须在已排序数组中使用。
数组拷贝Arrays.copyOf(original, newLength)
Arrays.copyOfRange(original, from, to)
java.util.Arrays灵活复制数组全部或部分内容。
数组填充Arrays.fill(array, value)java.util.Arrays将数组所有或指定范围元素设为同一个值。
数组转字符串Arrays.toString(array)
Arrays.deepToString(array)
java.util.Arrays方便打印一维或多维数组内容。
数组比较Arrays.equals(array1, array2)
Arrays.deepEquals(array1, array2)
java.util.Arrays比较一维或多维数组内容是否相等。
集合判空CollectionUtils.isEmpty(collection)
CollectionUtils.isNotEmpty(collection)
org.springframework.util.CollectionUtils安全地检查集合是否为 null 或空。
数组转集合CollectionUtils.arrayToList(array)org.springframework.util.CollectionUtils支持基本类型数组转换。
数组合并到集合CollectionUtils.mergeArrayIntoCollection(array, collection)org.springframework.util.CollectionUtils将数组元素合并到现有集合中。
集合空值兜底CollectionUtils.emptyIfNull(collection)org.springframework.util.CollectionUtils如果集合为 null,返回一个空集合,避免 NPE
集合包含检查CollectionUtils.contains(collection.iterator(), element)org.springframework.util.CollectionUtils检查集合是否包含某元素。
对象/数组判空ObjectUtils.isEmpty(obj)org.springframework.util.ObjectUtils可检查对象、数组、集合等是否为 null 或空。
获取首个非空对象ObjectUtils.firstNonNull(obj1, obj2, ...)org.springframework.util.ObjectUtils从多个对象中返回第一个非 null 的。
数组转分隔字符串StringUtils.arrayToCommaDelimitedString(arr)org.springframework.util.StringUtils将数组元素用逗号连接成字符串。

🚀 数组与集合互转(高频场景)

这是日常开发中最常见的操作之一,需要特别注意不同方法的区别。

  1. 数组 转 List

    • Arrays.asList(T... a)最常用,但返回的 List固定长度的,不能进行 addremove 操作。且不支持基本类型数组。

      // 引用类型数组 -> 正确
      String[] strArray = {"a", "b"};
      List<String> list = Arrays.asList(strArray);
      
      // 基本类型数组 -> 错误! list 实际上是一个包含 int[] 对象的 List
      int[] intArray = {1, 2};
      List<int[]> list = Arrays.asList(intArray); 
    • new ArrayList<>(Arrays.asList(array)):创建一个可变的 ArrayList,可以自由增删元素。

      String[] strArray = {"a", "b"};
      List<String> list = new ArrayList<>(Arrays.asList(strArray));
      list.add("c"); // 可以操作
    • CollectionUtils.arrayToList(array):Spring 提供的工具方法,优雅地解决了基本类型数组的转换问题。

      int[] intArray = {1, 2};
      // 自动将 int[] 转为 List<Integer>
      List<?> list = CollectionUtils.arrayToList(intArray); 
    • Arrays.stream(array).collect(Collectors.toList()):Stream 方式,灵活强大,适用于需要进行过滤、映射等复杂操作后再收集的场景。
  2. List 转 数组

    • list.toArray(T[] a):标准推荐方式。

      List<String> list = Arrays.asList("a", "b");
      // 传入一个长度相同的空数组,类型安全
      String[] array = list.toArray(new String[0]);
    • list.stream().toArray():Java 8 引入的 Stream 方式。

      List<String> list = Arrays.asList("a", "b");
      String[] array = list.stream().toArray(String[]::new);

✨ 高阶技巧:Stream 流式处理

对于复杂的数组操作(过滤、转换、聚合),Stream API 是首选。

int[] numbers = {1, 2, 3, 4, 5};

// 1. 过滤出偶数并打印
Arrays.stream(numbers).filter(n -> n % 2 == 0).forEach(System.out::println); // 输出 2, 4

// 2. 所有元素乘以2并收集为新的List
List<Integer> doubledList = Arrays.stream(numbers)
                                  .map(n -> n * 2)
                                  .boxed() // 将 IntStream 装箱为 Stream<Integer>
                                  .collect(Collectors.toList());

对于二维数组,Arrays.stream(arr) 得到的是 Stream<int[]>,即每一行作为一个元素。


🧰 企业常用第三方库

虽然标准库和 Spring 工具类已很强大,但在实际项目中,为了进一步简化代码、减少样板代码,往往会引入一些优秀的第三方库:

  • Hutool:国产明星工具库,提供 ArrayUtil 等大量实用的数组操作方法。
  • Guava:Google 出品,其 ListsInts 等工具类在集合和数组操作上非常强大。
  • Apache Commons Lang:老牌工具库,提供 ArrayUtils 类。

这些库通常提供了更丰富、更便捷的API,例如判空、反转、合并等,可以作为补充。


⚠️ 踩坑指南

  1. Arrays.asList() 的“坑”

    • 返回的是 java.util.Arrays.ArrayList,不是我们常用的 java.util.ArrayList不支持 add/remove 操作,否则会抛出 UnsupportedOperationException
    • 基本类型数组的误用:如 Arrays.asList(new int[]{1,2}),得到的是一个 List<int[]>,而非 List<Integer>
  2. 空指针异常 (NullPointerException)

    • 当数组或集合为 null 时,直接操作或遍历会抛出 NPE。建议使用 Spring 的 CollectionUtils.isEmpty()ObjectUtils.isEmpty()进行安全检查。
  3. 数组越界 (ArrayIndexOutOfBoundsException)

    • 访问数组时,索引必须在 [0, array.length - 1] 范围内。遍历时优先使用增强 for 循环或 Arrays.stream() 来避免手动管理索引。

💎 总结

Spring Boot 2.7 企业开发中的数组操作,核心是掌握 java.util.Arraysorg.springframework.util 包下的工具类。对于数组与集合的转换、判空等高频操作,优先使用 Spring 的 CollectionUtils,可以避免很多常见的坑。对于复杂的业务逻辑,善用 Stream API 能让代码更清晰、更优雅。

1

评论

博主关闭了所有页面的评论