Pull to refresh
10
0
Sergei Makarov @wikendp

User

Send message

If key != key (NaNs), then the hash could be (and probably will be) entirely different from the old hash. Moreover, it isn't reproducible.

Должно быть так. Я, естественно, не проверял, поверил на слово :)

О, спасибо! Как раз понадобится такое для второй части)

Выглядит вполне рабочим, пока не подвезут экспорт из коробки.

Да, якобы и правда быстрее. В пределах тех синтетических тестов) Попробую как-нибудь разобраться из-за чего конкретно оно работает быстрее.

Да, в таком случае и правда не сходим в overflow. Будет два значения по одному ключу.
Спасибо, поправлю.

Если кратко - нет)

m.Put("key1", 1) // массив tophash [val1, 0, 0, ...]
m.Put("key2", 2) // [val1, val2, 0, 0, ...]
m.Delete("key1") // [1, val2, 0, 0, ... ]
m.Put("key2", 3) 

Например, добавляем два элемента и удаляем первый из них. У нас в массиве tophash появится "дыра" со значением 1 == emptyCell. По этому значению мы понимаем что ячейка пустая, но положить сразу туда значение мы не можем, т.к. возможно значение для key2 находится дальше. По этому мы просто запоминаем первую свободную ячейку на случай когда в конце итерации мы не нашли совпадение по переданному ключу.

Information

Rating
Does not participate
Registered
Activity