通过阅读HashSet的源码,我们可以发现,它里面其实是封装了HashMap做为存放数据的容器(
HashMap储存数据的方式是:键值对),我们add进去的对象是以HashMap的键存在,迭代set,其实就是把HashMap的键拿出来迭代。而所有的键(我们add进去的对象)对应的value都是同一个对象(private static final Object PRESENT = new Object();)
部分源码:
public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, java.io.Serializable
{
static final long serialVersionUID = -5024744406713321676L;
private transient HashMap<E,Object> map; //存放我们add进去的对象的容器
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();//所有的键指向同一个value
/