@Override
  public String toString() {
    Iterator<Entry<TypeK,TypeV>> i = entrySet().iterator();
    if( !i.hasNext())
      return "{}";

    StringBuilder sb = new StringBuilder();
    sb.append('{');
    for (;;) {
      Entry<TypeK,TypeV> e = i.next();
      TypeK key = e.getKey();
      TypeV value = e.getValue();
      sb.append(key   == this ? "(this Map)" : key);
      sb.append('=');
      sb.append(value == this ? "(this Map)" : value);
      if( !i.hasNext())
        return sb.append('}').toString();
      sb.append(", ");
    }
  }
Returns a string representation of this map.  The string representation
consists of a list of key-value mappings in the order returned by the
map's <tt>entrySet</tt> view's iterator, enclosed in braces
(<tt>"{}"</tt>).  Adjacent mappings are separated by the characters
<tt>", "</tt> (comma and space).  Each key-value mapping is rendered as
the key followed by an equals sign (<tt>"="</tt>) followed by the
associated value.  Keys and values are converted to strings as by
{@link String#valueOf(Object)}.

@return a string representation of this map
jctools-core/src/main/java/org/jctools/maps/NonBlockingIdentityHashMap.java