@Override
    public boolean put( K key, V value )
    {
        HashSet< K > keys = null;
        HashSet< V > values = null;
        
        // Check for key and/or value in map
        
        if( mapKV.containsKey( key ) )
        {
            // Key exists in map, get it's value set
            
            values = mapKV.get( key );
            
            // Check for value in map
            
            if( mapVK.containsKey( value ) )
            {
                // Check for mapping
                
                if( values.contains( value ) )
                {
                    // Mapping already exists, return false
                    
                    return false;
                }
                
                // Get key set for value
                
                keys = mapVK.get( value );
            }
            else
            {
                // Value doesn't exist, add it to map
                
                keys = new HashSet< K >();
                
                mapVK.put( value, keys );
            }
        }
        else if( mapVK.containsKey( value ) )
        {
            // Key doesn't exist, so add it to map
            
            values = new HashSet< V >();
            
            mapKV.put( key, values );
            
            // Get key set for value
            
            keys = mapVK.get( value );
        }
        else
        {
            // Neither key nor value exists in map, add both
            
            keys = new HashSet< K >();
            values = new HashSet< V >();
            
            mapKV.put( key, values );
            mapVK.put( value, keys );
        }
        
        // Add mappings
            
        keys.add( key );
        values.add( value );
        
        // Update hash codes
        
        if( key != null )
        {
            kHash += key.hashCode();
        }
        
        if( value != null )
        {
            vHash += value.hashCode();
        }
        
        // Increment size counter
        
        size += 1;
        
        return true;
    }