HashSet源码阅读

本文主要探讨HashSet的成员属性和构造方法。HashSet内部包含一个HashMap,成员属性包括HashMap和一个虚值。无参构造器会实例化HashMap,有参构造器根据传入参数如集合、初始容量和负载因子来初始化HashMap。主要方法的实现依赖HashMap,利用其键值唯一性实现元素的添加和过滤。
摘要由CSDN通过智能技术生成

前言

之前我们研究了HashMap的源码,那么接下来我们趁热打铁来看下HashSet的源码中有什么奥妙。

正文

1、HashSet的成员属性

首先先介绍下HashSet的成员属性:

    private transient HashMap<E,Object> map;

HashSet内部中存在一个HashMap的变量,但未初始化。

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

与支持Map中的一个Object相关联的虚值。

2、HashSet的构造方法

再介绍下HashSet的构造方法:

(1)无参构造器

无参构造器:

    /**
     * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
     * default initial capacity (16) and load factor (0.75).
     */
    public HashSet() {
        map = new HashMap<>();
    }

将HashMap的变量实例化。

(2)有参构造器

Ⅰ传入一个指定集合对象
    /**
     * Constructs a new set containing the elements in the specified
     * collection.  The <tt>HashMap</tt> is created with default load factor
     * (0.75) and an initial capacity sufficient to contain the elements in
     * the specified collection.
     *
     * @param c the collection whose elements are to be placed into this set
     * @throws NullPointerException if the specified collection is null
     */
    public HashSet(Collection<? extends E> c) {
        map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
        addAll(c);
    }

跟据传入集合的大小来实例化HashMap变量。再调用addAll方法:

    /**
     * {@inheritDoc}
     *
     * <p>This implementa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值