HashSet源码分析

源码来自jdk1.8


  • HashSet实现了Set接口
  • 内部由一个HashMap实现
  • 允许一个null值
  • 不同步
  • add, contains, remove, size O(1)
  • iterator fast fail
public class HashSet<E>
    extends AbstractSet<E>
    implements Set<E>, Cloneable, java.io.Serializable
{
    private transient HashMap<E,Object> 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 <tt>HashMap</tt> instance has
     * default initial capacity (16) and load factor (0.75).
     */
    public HashSet() {
        map = new HashMap<>();
    }
    // 省略了其他方法
}

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容