@Override
    public boolean put( K key, V value )
    {
        if ( key == null )
        {
            throw new IllegalArgumentException( "key was null" );
        }
        if ( value == null )
        {
            throw new IllegalArgumentException( "value was null" );
        }
        int offset = offset( key );
        int reprobes = 0;
        while ( keys[offset] != null && keys[offset] != Tombstone )
        {
            if ( keys[offset].equals( key ) )
            {
                if ( values[offset] == value )
                {
                    return false;
                }
                else
                {
                    values[offset] = value;
                    return true;
                }
            }
            offset = nextHop( offset );
            if ( offset == offset( key ) )
            {
                return false;
            }
            reprobes++;
        }
        increaseSize();
        keys[offset] = key;
        values[offset] = value;
        checkResize( reprobes );
        return true;
    }