int spread(Object element)
    {
        // This function ensures that hashCodes that differ only by
        // constant multiples at each bit position have a bounded
        // number of collisions (approximately 8 at default load factor).
        K nonSentinelKey = this.toNonSentinel(element);
        int h = nonSentinelKey == null ? 0 : this.hashingStrategy.computeHashCode(nonSentinelKey);
        h ^= h >>> 20 ^ h >>> 12;
        h ^= h >>> 7 ^ h >>> 4;
        return h & (this.keys.length - 1);
    }
int spread ( Object element ) { K nonSentinelKey = this . toNonSentinel ( element ) ; int h = nonSentinelKey == null ? 0 : this . hashingStrategy . computeHashCode ( nonSentinelKey ) ; h ^= h > > > 20 ^ h > > > 12 ; h ^= h > > > 7 ^ h > > > 4 ; return h & ( this . keys . length - 1 ) ; }
exposed for testing