zoukankan      html  css  js  c++  java
  • HashSet 源码分析

    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();
        }
    
  • 相关阅读:
    当前流行的智能硬件产品整理
    一个桌面视频录制利器推荐--Snagit
    微信支付---退款的坑
    微信支付退款证书服务器配置
    Git安装和TortoiseGit详细使用教程【基础篇】
    通俗易懂,什么是.NET Core以及.NET Core能做什么
    向ASP.NET Core迁移
    SQLServer 查看SQL语句的执行时间
    SqlServer 2014 Enterprise 企业版下载与安装教程(附图片)
    SQL Server表分区
  • 原文地址:https://www.cnblogs.com/zhuxudong/p/10041561.html
Copyright © 2011-2022 走看看