码迷,mamicode.com
首页 > 其他好文 > 详细

HashSet 源码分析

时间:2018-11-30 00:37:36      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:turn   factor   als   移除   存在   remove   int   void   返回值   

HashSet

1)HashSet 是基于 HashMap 的 Set 接口实现,元素的迭代是无序的,可以使用 null 元素。

创建实例

    /**
     * HashSet基于HashMap实现
     */
    private transient HashMap<E,Object> map;

    // 用于在支持的 HashMap 中关联键的傀儡对象
    private static final Object PRESENT = new Object();

    /**
     *  创建一个初始容量为 16,加载因子为 0.75 的 HashMap 支持的 HashSet
     */
    public HashSet() {
        map = new HashMap<>();
    }

    /**
     *  创建一个初始容量为 initialCapacity,加载因子为 loadFactor 的 HashMap 支持的 HashSet
     */
    public HashSet(int initialCapacity, float loadFactor) {
        map = new HashMap<>(initialCapacity, loadFactor);
    }

    /**
     *  创建一个初始容量为 initialCapacity,加载因子为 0.75 的 HashMap 支持的 HashSet
     */
    public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }

    /**
     *  创建一个初始容量为 initialCapacity,
     *  加载因子为 loadFactor 的 LinkedHashMap 支持的 HashSet,
     *  主要被 LinkedHashSet 使用。
     */
    HashSet(int initialCapacity, float loadFactor, boolean dummy) {
        map = new LinkedHashMap<>(initialCapacity, loadFactor);
    }

其他方法

    /**
     *  获取 HashSet 中所有元素的乱序迭代器
     */
    public Iterator<E> iterator() {
        return map.keySet().iterator();
    }

    /**
     *  获取 HashSet 中元素的总数
     */
    public int size() {
        return map.size();
    }

    /**
     *  HashSet 是否为空
     */
    public boolean isEmpty() {
        return map.isEmpty();
    }

    /**
     *  判断此 HashSet 中是否包含指定的值
     */
    public boolean contains(Object o) {
        return map.containsKey(o);
    }

    /**
     *  如果元素不存在,则新增【返回值为 null】,返回值为 true;
     *  否则不对 HashSet 做修改,返回值为 false【PRESENT == null】。
     */
    public boolean add(E e) {
        return map.put(e, HashSet.PRESENT)==null;
    }

    /**
     *  从 HashSet 中移除指定的元素
     */
    public boolean remove(Object o) {
        return map.remove(o)==HashSet.PRESENT;
    }

    /**
     *  清空 HashSet
     */
    public void clear() {
        map.clear();
    }

HashSet 源码分析

标签:turn   factor   als   移除   存在   remove   int   void   返回值   

原文地址:https://www.cnblogs.com/zhuxudong/p/10041561.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!