Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

怎样使用 HashSet 完成去重和成员操作?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

HashSet 是集合类,创建实例后调用 add、contains、remove 等方法管理唯一成员。add 返回是否真的新增,remove 返回是否真的删除;它不承诺遍历顺序,也不支持按下标读取。元素需要遵守 equals、hashCode 约定,相关状态入集合后应保持稳定。

讲清原理

去重是成员关系,不是排序。把列表放入 HashSet,可以留下按其规则判等后的成员,但打印顺序不能作为业务约定。若需要保留相遇次序,考虑 LinkedHashSet;要按比较规则有序,考虑 TreeSet。

retainAll、removeAll、addAll 可用于常见交集、差集、并集操作,不过它们会修改接收集合。想保留原数据,应先复制;不同集合的判等或比较规则也必须兼容。

例子与易错点

Java 21 的 main 片段:

var set = new java.util.HashSet<>(java.util.List.of("A", "B", "A"));
System.out.println(set.size());
System.out.println(set.contains("A"));
System.out.println(set.remove("B"));
set.retainAll(java.util.Set.of("A", "C"));
System.out.println(set.size() + ":" + set.contains("A"));

输出 2、true、true、1:true。这里有意检查数量与成员,不断言 HashSet 的打印顺序。若后续多个线程共同写入,普通 HashSet 还需要外部同步或改用合适的并发 Set。

相关题:第 13 题、第 27 题、第 29 题、第 40 题、第 48 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。