HashSet源码分析

源码来自jdk1.8


  • HashSet实现了Set接口
  • 内部由一个HashMap实现
  • 允许一个null值
  • 不同步
  • add, contains, remove, size O(1)
  • iterator fast fail
public class HashSet
    extends AbstractSet
    implements Set, Cloneable, java.io.Serializable
{
    private transient HashMap map;

    // Dummy value to associate with an Object in the backing Map
    private static final Object PRESENT = new Object();

    /**
     * Constructs a new, empty set; the backing HashMap instance has
     * default initial capacity (16) and load factor (0.75).
     */
    public HashSet() {
        map = new HashMap<>();
    }
    // 省略了其他方法
}

由于是用HashMap实现的,所以每次添加元素的时候,key来存储值,value就是静态的PRESENT。
其他所有的方法都是由调用map里的方法实现的。

你可能感兴趣的:(HashSet源码分析)