// HashSet的关键源码 public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable { // HashSet中封装的HashMap,这个map也是数据储存的地方 private transient HashMap<E,Object> map; //在add方法中调用map.put(key,value)方法,把要添加的元素传给key,把PRESENT传给Value private static final Object PRESENT = new Object(); // HashSet默认的构造方法,构造了一个HashMap public HashSet() { map = new HashMap<>(); } // 添加一个元素 public boolean add(E e) { //调用map.put(key,value)方法,若添加成功,则put方法返回null,进而add方法返回true // *****HashSet集合中添加进来的元素是存放在HashMap中的Key中,而HashMap中的Value则放一个没有任何意义的Object对象PRESENT return map.put(e, PRESENT)==null; } // map.remove(key)方法,若存在该key,则返回key.value,否则返回null public boolean remove(Object o) { return map.remove(o)==PRESENT; } }
原文:http://blog.csdn.net/wodewutai17quiet/article/details/46238841