private static boolean keyeq( Object K, Object key, int[] hashes, int hash, int fullhash ) {
    return
      K==key ||                 // Either keys match exactly OR
      // hash exists and matches?  hash can be zero during the install of a
      // new key/value pair.
      ((hashes[hash] == 0 || hashes[hash] == fullhash) &&
       // Do not call the users' "equals()" call with a Tombstone, as this can
       // surprise poorly written "equals()" calls that throw exceptions
       // instead of simply returning false.
       K != TOMBSTONE &&        // Do not call users' equals call with a Tombstone
       // Do the match the hard way - with the users' key being the loop-
       // invariant "this" pointer.  I could have flipped the order of
       // operands (since equals is commutative), but I'm making mega-morphic
       // v-calls in a re-probing loop and nailing down the 'this' argument
       // gives both the JIT and the hardware a chance to prefetch the call target.
       key.equals(K));          // Finally do the hard match
  }
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/NonBlockingHashMap.java