Могу ли я быть уверен, что встроенный хэш для данной строки всегда одинаков? - PullRequest
9 голосов
/ 22 января 2009

Я получаю строковый хеш, как это:

string content = "a very long string";
int contentHash = content.GetHashCode();

Затем я сохраняю хэш в словаре как отображение ключа на другой идентификатор. Это полезно, поэтому мне не нужно сравнивать большие строки во время вычисления хэша словаря по умолчанию, но я могу просто получить идентификатор из словаря по ключу.

Могу ли я быть уверен, что хеш для данной строки («очень длинная строка») всегда будет одинаковым?

Могу ли я быть уверен, что две разные строки не будут иметь одинаковый хэш?

Кроме того, если возможно, насколько вероятно получить один и тот же хеш для разных строк?

Ответы [ 12 ]

1 голос
/ 22 января 2009

Строки хэшируются в зависимости от их содержимого, поэтому да, этот хэш должен оставаться неизменным со временем, если вы используете стандартный GetHashCode.

0 голосов
/ 22 января 2009

Это отличный пример для зла преждевременной оптимизации.

Есть ли у вас вывод профилировщика или эталонного теста, который говорит вам, что сравнение строк между записями в одном хэш-контейнере фактически вызывает проблемы с производительностью?

Не думаю, что так. Просто используйте саму строку в качестве ключа в словаре. Вот как ты должен его использовать.

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

...