在 Java 中,Set 和 Map 都属于 Java 集合框架(Collection Framework),它们都用于存储数据,但用途和内部结构不同,同时又有密切的关系。
下面从几个角度说明它们的“关系”。
Set 是 Collection 的子接口HashSet
LinkedHashSet
TreeSet
HashMap
LinkedHashMap
TreeMap
✅ 很多 Set 的底层实现,其实就是基于 Map 实现的
public class HashSet<E> {
private transient HashMap<E, Object> map;
private static final Object PRESENT = new Object();
public HashSet() {
map = new HashMap<>();
}
}
✅ 你会发现:
HashSet 实际是用 HashMap 实现的Set 元素 = HashMap 的 keyvalue 统一用一个常量 PRESENTpublic class TreeSet<E> {
private transient NavigableMap<E, Object> m;
}
✅ TreeSet 底层是 TreeMap
| 对比点 | Set | Map |
|---|---|---|
| 是否允许重复 | ❌ 不允许 | ❌ key 不允许 |
| 是否有序 | 取决于实现 | 取决于实现 |
| 常见实现 | HashSet / TreeSet | HashMap / TreeMap |
| 查找效率 | O(1) / O(log n) | O(1) / O(log n) |
Set<String> set = new HashSet<>();
set.add("a");
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
Set 和 Map 是“兄弟关系”:
Set 负责存“唯一元素”,Map 负责存“键值对”;
而很多 Set 的实现(如 HashSet、TreeSet)本质上就是在用 Map 的 key 来实现去重。
如果你愿意,我也可以画一张 Set / Map 继承结构图 或结合 面试角度 给你讲。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。