Как обрабатывать дублирующиеся элементы в пользовательской реализации HashMap?

Я пытаюсь реализовать простую HashMap на Java в образовательных целях. Я столкнулся с проблемой, когда мне нужно обрабатывать дубликаты ключей. Моя текущая реализация не обновляет значение при вставке дубликата ключа; вместо этого она создает новую запись.

Вот часть моего codeа, где я обрабатываю вставку:

class HashMapCustom<K, V> {
    private Entry<K, V>[] table; //Array of Entry
    private int capacity = 4; //Initial capacity of HashMap

    static class Entry<K, V> {
        K key;
        V value;
        Entry<K, V> next;

        public Entry(K key, V value, Entry<K, V> next) {
            this.key = key;
            this.value = value;
            this.next = next;
        }
    }

    public void put(K newKey, V data) {
        if (newKey == null) {
            return; //does not allow to store null
        }

        int hash = hash(newKey);
        Entry<K, V> newEntry = new Entry<K, V>(newKey, data, null);

        if (table[hash] == null) {
            table[hash] = newEntry;
        } else {
            Entry<K, V> previous = null;
            Entry<K, V> current = table[hash];

            while (current != null) { //we have reached last entry of bucket.
                if (current.key.equals(newKey)) {
                    if (previous == null) { //node has to be insert on first of bucket.
                        newEntry.next = current.next;
                        table[hash] = newEntry;
                        return;
                    } else {
                        newEntry.next = current.next;
                        previous.next = newEntry;
                        return;
                    }
                }
                previous = current;
                current = current.next;
            }
            previous.next = newEntry;
        }
    }

    private int hash(K key) {
        return Math.abs(key.hashCode()) % capacity;
    }
}
Аристарх
Вопрос задан18 февраля 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.