code: public static int hash(int hashCode, int level) {
  		final int rotation = level * 11;
  		int code = Integer.rotateLeft(hashCode, rotation);
  		return code >= 0 ? code : -(code + 1);
  	}
docs: The level parameter is needed so that we can have different hash functions when we
  recursively apply the partitioning, so that the working set eventually fits into memory.