2. Java 集合 List Set Map 怎么区分
Java 集合是测试开发面试中非常高频的基础题。很多同学会背“List 有序可重复,Set 无序不重复,Map 是键值对”,但面试官继续问“接口自动化里怎么用”“请求参数为什么用 Map”“去重用什么”“返回列表怎么断言”,就容易答得很空。测试岗位准备集合,一定要把集合和接口测试、数据驱动、响应解析、用例管理结合起来。
Java 集合框架可以帮助我们组织数据。测试开发中,测试用例、请求参数、响应字段、数据库结果、失败用例统计,都需要集合来承载。你能不能正确选择集合,决定了代码是否清晰、可维护。
一、List 怎么理解
List 是有序、可重复的集合。
常见实现类:
- ArrayList;
- LinkedList。
List 适合保存一组有顺序的数据,比如多条测试用例、接口返回列表、订单列表、商品列表。
示例:
List caseNames = new ArrayList();
caseNames.add("登录成功");
caseNames.add("密码错误");
测试场景:
- 保存多条测试数据;
- 遍历接口返回数组;
- 保存失败用例;
- 按顺序执行用例;
- 校验列表数量和内容。
二、Set 怎么理解
Set 是不重复的集合。常见实现类:
- HashSet;
- LinkedHashSet;
- TreeSet。
Set 适合去重和唯一性校验。
示例:
Set userIds = new HashSet();
userIds.add("1001");
userIds.add("1001");
最终只有一个 1001。
测试场景:
- 校验列表中是否有重复数据;
- 统计唯一用户;
- 校验订单号是否重复;
- 比较预期字段和实际字段;
- 去重失败模块。
三、Map 怎么理解
Map 是键值对结构,key 不能重复。
常见实现类:
- HashMap;
- LinkedHashMap;
- TreeMap;
- ConcurrentHashMap。
接口自动化中,Map 非常常用,因为请求参数、Header、JSON 响应都可以用键值对表示。
示例:
Map params = new HashMap();
params.put("username", "tester");
params.put("password", "123456");
测试场景:
- 请求参数;
- 请求头;
- 响应 JSON;
- 配置项;
- 数据库查询结果;
- 用例字段。
四、三者区别总结
| 类型 | 特点 | 常见用途 |
|---|---|---|
| List | 有序、可重复 | 多条用例、接口返回列表 |
| Set | 不重复 | 去重、唯一性校验 |
| Map | 键值对,key 不重复 | 请求参数、Header、响应 JSON |
面试时可以先说特点,再补测试场景。
五、接口自动化中怎么用
1. List 保存多条用例
List cases = new ArrayList();
每条用例是一个 Map,多条用例组成 List。
2. Map 保存请求参数
Map body = new HashMap();
body.put("productId", 1001);
body.put("count", 2);
3. Set 校验重复
Set orderIds = new HashSet(orderIdList);
assert orderIds.size() == orderIdList.size();
用于校验订单列表是否有重复订单号。
六、List 常见断言
接口返回列表时,可以断言:
- 列表不为空;
- 列表数量正确;
- 每个元素字段完整;
- 排序正确;
- 不包含重复数据;
- 分页数据正确。
例如订单列表:
assert orders.size() > 0;
七、Map 常见断言
Map 常用于响应字段校验。
assert responseMap.get("code").equals(0);
assert responseMap.containsKey("data");
字段不存在时,要能给出清晰错误,而不是空指针。
八、Set 常见断言
Set 适合唯一性校验。
比如接口返回用户列表,要求 userId 不重复。
测试思路:把所有 userId 放入 List,再转换成 Set,对比 size。
如果 Set 的大小小于 List,说明存在重复。
九、常见误区
1. 只背特点,不讲场景
面试更看重你能不能用集合解决测试问题。
2. 用 List 做去重
List 可以做,但不如 Set 直接。
3. 用 Map 时不判断 key 是否存在
容易出现 NullPointerException。
4. 误以为 HashMap 有顺序
HashMap 不保证顺序,如果需要顺序,可以考虑 LinkedHashMap。
十、面试回答模板
如果面试官问“Java 集合 List、Set、Map 怎么区分”,可以这样回答:
List 是有序可重复的集合,适合保存多条测试用例或接口返回列表;Set 不允许重复,适合做去重和唯一性校验,比如校验订单号是否重复;Map 是键值对结构,key 不重复,在接口自动化中最常用来保存请求参数、Header、响应字段和配置。实际项目中,我可能用 List 嵌套 Map 保存一组接口用例,每个 Map 表示一条用例的请求参数和预期结果;接口返回列表时用 List 遍历断言,用 Set 校验是否有重复数据。
十一、常见追问
追问:请求参数为什么常用 Map?
因为请求参数和 JSON 都是键值结构,用 Map 表达字段和值最自然。
追问:怎么判断接口返回列表有重复?
提取唯一字段放入 Set,对比 Set size 和原 List size。
追问:HashMap 是否有序?
不保证顺序。如果需要保持插入顺序,可以用 LinkedHashMap。
十二、练习清单
- 用 List 保存用例名称;
- 用 Map 保存登录参数;
- 用 Set 去重订单号;
- 遍历 List;
- 判断 Map 是否包含 key;
- 用 List 嵌套 Map 表示多条用例;
- 校验接口返回列表数量;
- 校验接口字段完整;
- 理解 HashMap 无序;
- 准备集合面试回答。
List、Set、Map 是 Java 测试开发最常用的数据结构。回答时一定要结合接口参数、响应列表、用例数据和唯一性校验。
配套刷题:

