前景
看完了HashMap之后,对hash表的认识加深了,再看看hashSet
HashSet
简介:HashSet也是基于散列而设置的集合,保证了集合的唯一性,无序性
维护的属性
private transient HashMap<E,Object> map;
private static final Object PRESENT = new Object();
一共维护了两个属性,一个是底层实现的Map,一个是Object对象(虚假值,实际上用不到,仅仅作为Map的值)
构造函数
public HashSet() {
map = new HashMap<>();
}
public HashSet(int initialCapacity) {
map = new HashMap<>(initialCapacity);
}
public HashSet(int initialCapacity, float loadFactor) {
map = new HashMap<>(initialCapacity, loadFactor);
}
通过构造函数我们可以看到Set的底层实现是用的是HashMap
add 增
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
调用了hashMap的put方法,可以看出,为了保证唯一性,存入的元素被当做了键值,然后用一个对象PRESENT象征性的代表值,所以起作用的还是这个键,其它的操作基本上都是用的hashMap就不看了,知道了底层是HashMap就不用深究了。