HashSet源码分析

hashSet内部是利用hashMap实现的,将值存在hashmap的key上这也是为什么hashset不允许存取重复值得原因。

数据结构

private transient HashMap<E,Object> map;    

    // 与支持映射中的对象关联的虚拟值 ,map中的value,只是一个无意义的空对象
    private static final Object PRESENT = new Object();

默认的构造函数

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

查询内容的时候实际是在map中查询key

public boolean contains(Object o) {
        return map.containsKey(o);
    }

增加的时候,在key的位置放置要存的值,在value中放置一个没有意义的空对象

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

相关推荐