public V put(K key, V value) {
        int index = key.hashCode() % this.map.length;
        int freeIndex = -1;
        
        while (this.map[index] != null) { 
            if (freeIndex == -1 && this.map[index].getKey() == null) {
                freeIndex = index;
            } else if (this.map[index].getKey().equals(key)) {
                return this.map[index].setValue(value);
            }
            
            index = (index + 1) % this.map.length;
        }
        
        if (freeIndex != -1) {
            index = freeIndex;
        }
        
        this.map[index] = new HashNode<K, V>(key, value);
        this.size++;
        
        if (this.size > this.load * this.map.length) {
            this.map = (HashNode<K, V>[]) this.resize();
        }
        
        return null;
    }