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

HashMap 与 HashSet 有什么区别?

查看完整题解

参考回答

直接回答

HashMap 保存键值对,用键找到对应值;HashSet 只表达某个元素是否存在,不提供独立业务值。HashSet 内部借用 HashMap,把元素放在键的位置,用统一占位值实现去重。因此二者共享哈希查找思路,但公开语义、方法参数和返回结果不同。

讲清原理

Map.put(k, v) 在相等键已存在时更新值;Set.add(e) 在等价元素存在时返回 false,表示没有新增,通常保留已有元素对象。两者都不保证遍历顺序,HashMap 允许 null 键和值,HashSet 可以有一个 null 元素。

底层关系并不让 HashSet 成为 Map 的子类型。你不能从 Set 查询某个键关联的任意业务资料,只能检查成员;若需要编号到资料的对应,就应使用 Map。

例子与易错点

Java 21 的 main 片段:

var seen = new java.util.HashSet<String>();
System.out.println(seen.add("A"));
System.out.println(seen.add("A"));
var counts = new java.util.HashMap<String, Integer>();
counts.put("A", 1);
counts.put("A", 2);
System.out.println(counts.get("A"));

输出 true、false、2。记录“看过哪些编号”用 Set;记录“每个编号出现几次”用 Map。二者的键或元素都必须遵守 equals 与 hashCode 的一致性约定。

相关题:第 2 题、第 13 题、第 18 题、第 40 题。

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

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