code: private Node<E> findRootOrCreateNode(E e) {
      Node<E> node = elmap.get(e);
      if (node != null) {
        return findRoot(node);
      }
      node = new Node<E>(e);
      elmap.put(e, node);
      return node;
    }
docs: If e is already in a non-trivial equivalence class, that is, a class with
  more than two elements, then return the {@link Node} corresponding to the
  representative element. Otherwise, if e sits in an equivalence class by
  itself, then create a {@link Node}, put it into elmap and return it.