温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Set和Map关系是什么

发布时间:2026-10-05 04:30:28 来源:亿速云 阅读:87 作者:小樊 栏目:编程语言

在 Java 中,Set 和 Map 都属于 Java 集合框架(Collection Framework),它们都用于存储数据,但用途和内部结构不同,同时又有密切的关系。

下面从几个角度说明它们的“关系”。


一、本质区别

1️⃣ Set

  • 继承关系:Set 是 Collection 的子接口
  • 特点:
    • 存储不重复的元素
    • 通常不保证顺序(具体看实现)
  • 常见实现:
    HashSet
    LinkedHashSet
    TreeSet
    

2️⃣ Map

  • 不是 Collection 的子接口
  • 特点:
    • 存储 key-value 键值对
    • key 不能重复
  • 常见实现:
    HashMap
    LinkedHashMap
    TreeMap
    

二、Set 和 Map 的核心关系(重点)

✅ 很多 Set 的底层实现,其实就是基于 Map 实现的

举例说明(源码角度)

HashSet 的底层

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 的 key
  • value 统一用一个常量 PRESENT

TreeSet 的底层

public class TreeSet<E> {
    private transient NavigableMap<E, Object> m;
}

✅ TreeSet 底层是 TreeMap


三、Set 和 Map 的相似点

对比点 Set Map
是否允许重复 ❌ 不允许 ❌ key 不允许
是否有序 取决于实现 取决于实现
常见实现 HashSet / TreeSet HashMap / TreeMap
查找效率 O(1) / O(log n) O(1) / O(log n)

四、使用场景对比

用 Set 的场景

  • 去重
  • 判断是否存在(contains)
Set<String> set = new HashSet<>();
set.add("a");

用 Map 的场景

  • 需要通过 key 快速查找 value
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);

五、一句话总结

Set 和 Map 是“兄弟关系”:
Set 负责存“唯一元素”,Map 负责存“键值对”;
而很多 Set 的实现(如 HashSet、TreeSet)本质上就是在用 Map 的 key 来实现去重。

如果你愿意,我也可以画一张 Set / Map 继承结构图 或结合 面试角度 给你讲。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手