万金流
以码会友。 吾Q:578751655。 水平有限,轻喷,谢!

以下内容整理自AI。在掌握集合的基本概念和用法后,可以作为骨架梳理它在处理大量数据中的作用。


在 Spring Boot Web 开发里,集合的存在感极强——本质原因就一个:Web 开发处理的从来不是"一条"数据,而是"一批"数据,而 JSON 天生就是数组和对象,跟 List/Map 是一一对应的。

所以集合的职责可以概括成四个字:收、转、存、返。


1. 收:接住前端传来的批量数据(最核心)

前端传数组,List 直接接;传键值对对象,Map 或 DTO 接。

// 前端传 ids: [1,2,3]
@PostMapping("/delete")
public Result deleteBatch(@RequestBody List<Long> ids) { ... }

// 前端传 {"name":"张三","age":18},结构不固定时用 Map 兜底
@PostMapping("/search")
public Result search(@RequestBody Map<String, Object> params) { ... }

// 查询参数不固定,用 Map 全接
@GetMapping("/list")
public Result list(@RequestParam Map<String, String> params) { ... }

2. 返:把多条数据吐给前端

List<T> / List<VO> 被 Jackson 自动序列化成 JSON 数组,这是日常最高频的用法;分页结果也是 PageInfo 里包一个 List。

@GetMapping("/users")
public List<UserVO> list() {
    return userService.list();  // 直接变 JSON 数组
}

3. 存:持久层的批量读写

  • 入参:WHERE id IN (...) 传 List,MyBatis 的 <foreach> 靠的就是集合
  • 出参:查多条返回 List<Entity>;不确定列/统计结果返回 List<Map<String,Object>>
  • 批量写:insertBatch(List<User>)、saveBatch(list)——批量插入能大幅减少数据库往返

4. 转:业务层的数据处理(集合真正"干活"的地方)

这是体现代码功底的地方,配合 Stream 用得最多:

场景 用法
去重 new ArrayList<>(new HashSet<>(list))
分组 Collectors.groupingBy(User::getDeptId) → Map<Long, List<User>>
转字典 Collectors.toMap(User::getId, User::getName)
过滤/提取 stream().filter().map().collect()
批量查库优化 先收集 id 集合 → 一次 IN 查询 → 转 Map,避免循环查库(N+1 问题)

最后这条尤其关键:把"循环里查数据库"改成"收集成集合 → 批量查一次 → 转 Map 再匹配",是最常见的性能优化手段。

5. 配置与常量

application.yml 里的列表可以直接绑进集合:

app:
  white-ips:
    - 192.168.1.1
    - 10.0.0.1
@ConfigurationProperties(prefix = "app")
public class AppConfig {
    private List<String> whiteIps;   // 自动绑定
}

此外,Set 常用来做白名单/权限集合(判断存在性 O(1)),Map 常用来做状态码字典、枚举缓存。


选型一句话总结

  • List:有序、可重复 → 默认首选,收参返参主力
  • Set:去重、快速判断存在 → 权限集合、白名单、去重
  • Map:键值映射 → 字典、分组结果、动态参数、避免嵌套循环查询

Web 开发里,集合就是"多条数据"的搬运容器和处理管道——前端的数组进来,经过集合的过滤分组去重,装进 List 或 Map 再原路返回成 JSON。

posted on 2026-09-17 18:17  万金流  阅读(61)  评论(0)    收藏  举报