我的测试学习站TEST LEARNING HUB
开始学习
首页/精华文章/2. Java 集合 List Set Map 怎么区分

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。

十二、练习清单

  1. 用 List 保存用例名称;
  2. 用 Map 保存登录参数;
  3. 用 Set 去重订单号;
  4. 遍历 List;
  5. 判断 Map 是否包含 key;
  6. 用 List 嵌套 Map 表示多条用例;
  7. 校验接口返回列表数量;
  8. 校验接口字段完整;
  9. 理解 HashMap 无序;
  10. 准备集合面试回答。

List、Set、Map 是 Java 测试开发最常用的数据结构。回答时一定要结合接口参数、响应列表、用例数据和唯一性校验。

配套刷题: