HashSet

メンバに HashMap を持っていて、 HashSet#add(o) では HashMap に対して o をキーにこれまたメンバの Object を値として格納しているだけの単純な作りなことにビックリ・・・。

public class HashSet<E>
  extends AbstractSet<E>
  implements Set<E>, Cloneable, java.io.Serializable
{
  private transient HashMap<E,Object> map;
  // Dummy value to associate with an Object in the backing Map
  private static final Object PRESENT = new Object();


  public boolean add(E o) {
    return map.put(o, PRESENT)==null;
  }