Например, добавляем два элемента и удаляем первый из них. У нас в массиве tophash появится "дыра" со значением 1 == emptyCell. По этому значению мы понимаем что ячейка пустая, но положить сразу туда значение мы не можем, т.к. возможно значение для key2 находится дальше. По этому мы просто запоминаем первую свободную ячейку на случай когда в конце итерации мы не нашли совпадение по переданному ключу.
Должно быть так. Я, естественно, не проверял, поверил на слово :)
О, спасибо! Как раз понадобится такое для второй части)
Выглядит вполне рабочим, пока не подвезут экспорт из коробки.
Да, якобы и правда быстрее. В пределах тех синтетических тестов) Попробую как-нибудь разобраться из-за чего конкретно оно работает быстрее.
Да, в таком случае и правда не сходим в overflow. Будет два значения по одному ключу.
Спасибо, поправлю.
Если кратко - нет)
Например, добавляем два элемента и удаляем первый из них. У нас в массиве tophash появится "дыра" со значением
1 == emptyCell
. По этому значению мы понимаем что ячейка пустая, но положить сразу туда значение мы не можем, т.к. возможно значение дляkey2
находится дальше. По этому мы просто запоминаем первую свободную ячейку на случай когда в конце итерации мы не нашли совпадение по переданному ключу.