return new HashIterator<K>(KEYS);
return new KeyIterator();
  public Set<K> keySet()  {    if (keys == null)      {        // Create a synchronized AbstractSet with custom implementations of        // those methods that can be overridden easily and efficiently.        Set<K> r = new AbstractSet<K>()        {          public int size()          {            return size;          }          public Iterator<K> iterator()          {            return new HashIterator<K>(KEYS);          }          public void clear()          {            Hashtable.this.clear();          }          public boolean contains(Object o)          {            if (o == null)              return false;            return containsKey(o);          }          public boolean remove(Object o)          {            return Hashtable.this.remove(o) != null;          }        };        // We must specify the correct object to synchronize upon, hence the        // use of a non-public API        keys = new Collections.SynchronizedSet<K>(this, r);      }    return keys;  }