前面将了HashMap的实现,而HashSet则完全是使用了Has哈Map的存储,只是对外呈现只是Key列表集合的增加、删除等操作,而内部还是采用一个HashMap来存储数据。
现在来看下add方法:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
这里其实就是讲这个元素e放置到map中,只是所有的元素对应的value都为同一个对象PRESENT(PRESENT是一个Object的实例)。
然后来看下remove方法:
public boolean remove(Object o) {
return map.remove(o)==PRESENT;
}
remove方法就是基于key从map中将这个元素移除掉,内部的思想可以参考HashMap里面的remove方法的思想。先通过hashCode得到Entry对象的位置,然后依托链表的next来进行遍历,最后找到对应的数据进行删除,如果没有找到对象,那么map.remove(o)就是一个null,而null==PRESEND的返回结果就是false。
然后看下clear方法,完全调用map的clear方法。而对于map来说,clear只是将其size变为0,然后每一个Entry都设置为空,其实其Entry数组长度不会变化。