Java集合框架——HashSet源码分析

HashSet 是基于 HashMap 来实现的,HashMap 存放键值对,而 HashMap 只存放对象。
HashSet 的源码很简单,其实只需要弄懂 HashSet 的源码即可,可以参考:HashMap源码分析

属性

其属性很简单,一个 HashMap 对象,一个静态的空对象。

    // HashSet基于HashMap来实现的
    private transient HashMap<E,Object> map;
    // 一个静态的Object对象,没有什么意义,只是作为HashMap中键值对的值能put进去
    private static final Object PRESENT = new Object();

构造函数

几个构造函数可以参考 HashMap 的构造函数。

    public HashSet() {
        map = new HashMap<>();
    }

    public HashSet(Collection<? extends E> c) {
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        addAll(c);
    }

    public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }

    public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }

    // 这个是LinkedHashSet的构造函数,当然是LinkedHashMap来实现
    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }

基本方法

方法基本都是 HashMap 的相关方法。
这里只说明一个 add 方法,其调用 HashMap 的 put 方法,将键值对插入 HashMap 中,只不过键值对中的值是一个无意义的空对象。

    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值