Как написать метод удаления для хэшей, чтобы удалить значение? - PullRequest
0 голосов
/ 04 мая 2019

Я написал метод удаления для HashMap, и я получаю сообщения об ошибках, которые не возвращают правильное значение.

Инструкции гласят:

Метод remove (Object) должен удалить и вернуть значение, связанное с данным ключом, если ключ найден на карте.Удаленная запись должна быть заменена атрибутом REMOVED.Если карта не содержит ключа, этот метод не имеет никакого эффекта.

Поэтому, здесь часть моего кода, которая относится к моему коду, поэтому это не длинный код.

public class HashMap<K,V>
{
private final double MAX_LOAD_FACTOR = 0.75;
private HashEntry[] elementData;
private final HashEntry REMOVED = new HashEntry(null, null);
private int size;

public HashMap()
{
    this.elementData = new HashMap.HashEntry[10];
    size = 0;
}
public V remove(Object key)
{
    int h = hashFunction(key);
    while (elementData[h] != elementData[0] && elementData[h] != elementData[h].getKey())
    {
        h = (h + 1) % elementData.length;
    }
    if (elementData[h] == elementData[h].getKey())
    {
        elementData[h] = REMOVED;   // "removed" flag value
        size--;
        return elementData[h].getValue();
    }
    return elementData[h].getValue();
}
public class HashEntry
{
    private K key;
    private V value;

    public  HashEntry(K key, V value)
    {
        this.key = key;
        this.value = value;
    }
    public K getKey()
    {
        return key;
    }
    public V getValue()
    {
        return value;
    }
 }
}

Сообщение, которое я получаю из-за ошибки, состоит в том, что мой размер неверный, а также я возвращаю неправильное значение.Могу ли я получить помощь по этому вопросу?Я не знаю, где возникает проблема.

1 Ответ

1 голос
/ 08 мая 2019
public V remove(Object key)
{
    int h = hashFunction(key);

    while (elementData[h] != null)
    {
        if (elementData[h].getKey() != null && elementData[h].getKey().equals(key)) // linear probing to search
        {
            V store;
            store = elementData[h].value;
            elementData[h] = REMOVED;
            size--;
            return store;
        }
        h = (h + 1) % elementData.length;
    }
    return null;
}

У меня почти было это, я просто предполагал вернуть null и в конце и сохранить значение в другой переменной.

...