private void searchElement(K key) {

        // The search variables
        _searchHolder = null;
        _searchInnerIndex = -1;
        _searchBucketIndex = hash(key); // Here is magic

        if (buckets.getElement(_searchBucketIndex) == null) {

            // The key is not associated with any value
            // There is nothing even with this key's hash
            return;

        } else {

            // We might have collision and need to find out if the key is in here

            Array<KeyValueHolder<K, V>> bucketArray = buckets.getElement(_searchBucketIndex);

            for (int i = 0; i < bucketArray.getSize(); ++i) {
                _searchHolder = bucketArray.getElement(i);

                if (_searchHolder.key == key) {

                    // The key is found. We can now get or change value in the found KeyValueHolder
                    _searchInnerIndex = i;
                    return;
                }
            }

            // The key is not associated with any value
            // And we already know required bucket index for the record. It's useful if hash function is heavy.
            _searchHolder = null;
        }
    }