JAVA集合源码分析系列:HashSet源码分析

HashSet

分析

HashSet是一个没有重复元素的集合。
它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素。

HashSet的父类和实现的接口

public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable

构造函数

    public HashSet() {
        map = new HashMap<>();
    }

从构造方法可以很轻松的看出,HashSet的底层是一个HashMap,理解了HashMap后,这里没什么可说的。

属性

    static final long serialVersionUID = -5024744406713321676L;

    private transient HashMap<E,Object> map;

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

看到这里就明白了,和我们前面说的一样,HashSet是用HashMap来保存数据,而主要使用到的就是HashMap的key。

行为

add方法分析

    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }

利用HashMap的put方法实现add方法

remove方法分析

    public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }

利用HashMap的remove方法实现remove方法

    原文作者:java集合源码分析
    原文地址: https://blog.csdn.net/a910626/article/details/52357082
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞