HashSet源码分析

1. HashSet是使用HashMap来实现的

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

private transient HashMap<E,Object> map;  

// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();   //虚拟值,用来表示hashMap中的value值,在set中的值都是以key的形式存储在hashMap中
public boolean add(E e) {       //add()方法将元素作为key,并以PRESENT为value存入HashMap中
        return map.put(e, PRESENT)==null;
    }

2. 总结

  (1)由于在hashMap中key不可以重复所以HashSet中的元素不可重复。

  (2)同理hashMap中允许key为null,因此HashSet中的key也可以是null。

  (3)LinkedHashSet是使用LinkedHashMap实现的,原理相似。

  (4)TreeSet是使用NavigbleMap来实现的,原理同上。

posted @ 2019-11-18 20:20  神奇海螺。  阅读(134)  评论(0编辑  收藏  举报