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;
        }
    }
  • 相关阅读:
    java基础5 (一维)数组和二维数组
    Java 内部类
    Java 抽象类和接口
    Java 多态
    Java 继承
    Java 包(package)
    Java String类和StringBuffer类
    Java 数组
    Java 封装与类
    Java 概述和编程基础
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/10428644.html
Copyright © 2011-2022 走看看