code: public Set<K> keySet() {
          Set<K> ks = keySet;
          if (ks == null) {
              ks = new LinkedKeySet();
              keySet = ks;
          }
          return ks;
      }
docs: Returns a {@link Set} view of the keys contained in this map.
  The set is backed by the map, so changes to the map are
  reflected in the set, and vice-versa.  If the map is modified
  while an iteration over the set is in progress (except through
  the iterator's own <tt>remove</tt> operation), the results of
  the iteration are undefined.  The set supports element removal,
  which removes the corresponding mapping from the map, via the
  <tt>Iterator.remove</tt>, <tt>Set.remove</tt>,
  <tt>removeAll</tt>, <tt>retainAll</tt>, and <tt>clear</tt>
  operations.  It does not support the <tt>add</tt> or <tt>addAll</tt>
  operations.
  Its {@link Spliterator} typically provides faster sequential
  performance but much poorer parallel performance than that of
  {@code HashMap}.
  
  @return a set view of the keys contained in this map