@Override
    @SuppressWarnings("unchecked")
    public Object getUndefined(Object key) {
        // Math.abs(x % n) is the same as (x & n-1) when n is a power of 2
        int hashModMask = OpenAddressing.hashTableLength(hashTable) - 1;
        int hash = hashCode(key);
        int bucket = hash & hashModMask;

        int hashEntry = OpenAddressing.getHashEntry(hashTable, bucket) * 2;

        // We found an entry at this hash position
        while (hashEntry >= 0) {
            if (Utils.equal(keysAndValues[hashEntry], key)) {
                return (V) keysAndValues[hashEntry + 1];
            }

            // linear probing resolves collisions.
            bucket = (bucket + 1) & hashModMask;
            hashEntry = OpenAddressing.getHashEntry(hashTable, bucket) * 2;
        }
        return AbstractArrayMap.undefined;
    }
@ Override @ SuppressWarnings ( "unchecked" ) public Object getUndefined ( Object key ) { int hashModMask = OpenAddressing . hashTableLength ( hashTable ) - 1 ; int hash = hashCode ( key ) ; int bucket = hash & hashModMask ; int hashEntry = OpenAddressing . getHashEntry ( hashTable , bucket ) * 2 ; while ( hashEntry >= 0 ) { if ( Utils . equal ( keysAndValues [ hashEntry ] , key ) ) { return ( V ) keysAndValues [ hashEntry + 1 ] ; } bucket = ( bucket + 1 ) & hashModMask ; hashEntry = OpenAddressing . getHashEntry ( hashTable , bucket ) * 2 ; } return AbstractArrayMap . undefined ; }
If finish() has already been called on this map, this method returns the
value associated with the specified key. If the specified key is not in
this map, returns null.

If finish() has not been called on this map, this method always returns
null.