Почему HashSet не может просто использовать битовый массив внутри вместо HashMap для экономии места? - PullRequest
2 голосов
/ 28 мая 2019

Я вижу, что HashSet в Java внутренне использует HashMap, чтобы проверить, содержит ли HashSet элемент или нет.Разве он не может просто использовать растровое изображение для хранения всех результатов хеширования из строк.Например.Строка abc хэширует, чтобы сказать, 12 index, и мы можем просто установить этот индекс, чтобы показать, что он присутствует.Это сэкономит много места по сравнению с HashMap, поскольку нам не нужно хранить реальные ключи в данных.

1 Ответ

5 голосов
/ 28 мая 2019

Если HashSet использовался только для поиска в функции contains (), подобная оптимизация могла бы быть возможной. Это все равно будет опасно, потому что всегда могут происходить коллизии хешей. Я думаю, что вы ищете, это Фильтр Блума (обратите внимание, что Фильтр Блума не дает точных ответов, он просто исключает ложные негативы).

Хэш-набор - это коллекция, и у коллекции должна быть возможность извлечь сохраненные значения. Хеши необратимы, вы не можете вычислить исходную строку по ее хешу.

...