Это зависит от того, как вы обрабатываете переполнение, и от того, (1) находится ли удаляемый элемент в слоте переполнения или нет, и (2) есть ли элементы переполнения помимо удаляемого элемента, имеют ли они хэш-ключ удаляемый элемент или, возможно, какой-то другой хэш-ключ. [Пропуск двойного условия является распространенным источником ошибок в реализациях удаления.]
Если столкновения переполняются в связанный список, это довольно легко. Вы либо всплываете в списке (который может быть пустым), либо удаляете участника из середины или конца связанного списка. Это весело и не особенно сложно. Могут быть другие оптимизации, чтобы избежать чрезмерного выделения памяти и освобождения, чтобы сделать это еще более эффективным.
Для линейного зондирования Кнут предлагает простой способ пометить слот как пустой, удаленный или занятый. Пометьте удаленный слот-посетитель как удаленный, чтобы переполнение при линейном зондировании пропустило его, но если требуется вставка, вы можете заполнить первый удаленный слот, который вы пропустили [Искусство компьютерного программирования, том 3: Сортировка и поиск , раздел 6.4 Хеширование, с. 533 (ред.2)]. Это предполагает, что удаления довольно редки.
Кнут дает хорошее уточнение как Алгоритм R6.4 [стр. 533-534], который вместо этого помечает ячейку как пустую, а не как удаленную, а затем находит способы переместить записи таблицы обратно ближе к их исходному положению зонда, перемещая только что сделанное отверстие, пока оно не окажется рядом с другим отверстием.
Кнут предупреждает, что это переместит существующие все еще занятые записи слотов и не является хорошей идеей, если указатели на слоты удерживаются за пределами хэш-таблицы. [Если у вас есть собранные в мусоре или другие управляемые ссылки в слотах, все в порядке, если вы перемещаете слот, так как это ссылка, которая используется за пределами таблицы, и не имеет значения, где находится слот, который ссылается тот же объект находится в таблице.]