class="java" name="code"> //先看构造函数 public HashSet() { map = new HashMap<>(); } public HashSet(int initialCapacity) { map = new HashMap<>(initialCapacity); } public HashSet(int initialCapacity, float loadFactor) { map = new HashMap<>(initialCapacity, loadFactor); } //这个构造方法不是public的,仅用于LinkedHashSet. HashSet(int initialCapacity, float loadFactor, boolean dummy) { map = new LinkedHashMap<>(initialCapacity, loadFactor); } //新增 PRESENT代表一个对象(虚拟对象) public boolean add(E e) { return map.put(e, PRESENT)==null; } public boolean contains(Object o) { return map.containsKey(o); } public int size() { return map.size(); } public boolean isEmpty() { return map.isEmpty(); } public boolean remove(Object o) { return map.remove(o)==PRESENT; } public void clear() { map.clear(); } public Iterator<E> iterator() { return map.keySet().iterator(); } /** 总结:HashSet低层使用HashMap实现,通过HashMap的key不允许重复来保证元素不能重复。 另外LinkedHashSet继承了HashSet.低层使用使用的LinkedHashMap实现。可以保证Set集合在插入时候的顺序。 */