HashSet源码分析
Posted mike_chang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; } }
以上是关于HashSet源码分析的主要内容,如果未能解决你的问题,请参考以下文章