code: protected void rehash(final int newN) {
          final char key[] = this.key;
          final char value[] = this.value;
          final int mask = newN - 1; // Note that this is used by the hashing macro
          final char newKey[] = new char[newN + 1];
          final char newValue[] = new char[newN + 1];
          int i = n, pos;
          for (int j = realSize(); j-- != 0; ) {
              while (((key[--i]) == ((char) 0))) ;
              if (!((newKey[pos = (HashCommon.mix((key[i]))) & mask]) == ((char) 0)))
                  while (!((newKey[pos = (pos + 1) & mask]) == ((char) 0))) ;
              newKey[pos] = key[i];
              newValue[pos] = value[i];
          }
          newValue[newN] = value[n];
          n = newN;
          this.mask = mask;
          maxFill = maxFill(n, f);
          this.key = newKey;
          this.value = newValue;
      }
docs: Rehashes the map.
  <br>This method implements the basic rehashing strategy, and may be overriden by subclasses implementing different rehashing strategies (e.g., disk-based rehashing). However, you should not
  override this method unless you understand the internal workings of this class.
  
  @param newN the new size