zoukankan      html  css  js  c++  java
  • HashSet

    HashSet源码分析——HashSet由哈希表实现

    package java.util;
    
    import java.io.InvalidObjectException;
    import sun.misc.SharedSecrets;
    
    public class HashSet<E>
        extends AbstractSet<E>
        implements Set<E>, Cloneable, java.io.Serializable {
    
        private transient HashMap<E,Object> map;
    
        // 无参构造方法
        public HashSet() {
            map = new HashMap<>();
        }
        // 有参构造方法
        public HashSet(int initialCapacity, float loadFactor) {
            map = new HashMap<>(initialCapacity, loadFactor);
        }
        // 有参构造方法,创建的是一个LinkedHashMap
        HashSet(int initialCapacity, float loadFactor, boolean dummy) {
            map = new LinkedHashMap<>(initialCapacity, loadFactor);
        }
        // /ˈpreznt/ 现在的
        private static final Object PRESENT = new Object();
    
        public boolean add(E e) {
            /* 如果e是重复的,也就是key相同,
             * HashMap会用新的value覆盖旧的value,
             * 但在这里其实两个value是一样的,都是PRESENT
             * 接着返回旧的value,不等于null,最后返回false
             */
            return map.put(e, PRESENT)==null;
        }
    
        public boolean remove(Object o) {
            return map.remove(o)==PRESENT;
        }
    }
  • 相关阅读:
    2019春第十一周作业
    2019春第十周作业
    2019春第九周作业
    2019春第八周作业
    2019春第七周作业
    2019春第六周作业
    寒假作业一:打印沙漏
    寒假作业三:抓老鼠啊亏了~还是赚了?
    寒假作业二:币值转换
    秋季学期学习总结
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/10428644.html
Copyright © 2011-2022 走看看