在我们学过HashMap之后,再来看HashSet就很easy了。因为HashSet是基于HashMap是实现的。
打开HashSet的源码,可以看到维护了一个HashMap
一、成员变量
//用来存储HashSet的元素 private transient HashMap<E,Object> map; //这个Object是用来填充HashMap的value的。 private static final Object PRESENT = new Object();
二、构造方法
public HashSet() { map = new HashMap<>(); }
可以看到,默认构造就是将成员变量的HashMap实例化。
三、方法
public int size() { return map.size(); }
size就是HashMap的size。
public boolean contains(Object o) { return map.containsKey(o); }
因为HashSet只使用了HashMap的键,所以使用HashMap的containsKey方法
public boolean add(E e) { return map.put(e, PRESENT)==null; }
添加时,只需要将要添加的元素和刚才的填补Value的Object对象添加到HashMap中
public boolean remove(Object o) { return map.remove(o)==PRESENT; }移除使用HashMap的remove方法
是不是很简单。只要你知道HashSet维护了一个HashMap,然后HashSet的操作就是你所熟悉的HashMap对键的操作。