Альтернатива словарю для коллекций с ключами Int32? - PullRequest
1 голос
/ 04 апреля 2011

Хеш Int32 является значением Int32 через:
Хеш-таблицы (словарь и т. Д.) С целочисленными ключами

Как таковое, какое значение добавляется с помощью Dictionary(Of Integer, someObject) (или любой другой коллекции хэширования)?

Мне, конечно, нужно будет использовать .Contains(integerKey) для предотвращения ошибок ... но я могу вообще пропустить алгоритм хеширования, верно?

Какой тип вы бы использовали для оптимизации вставки / извлечения?

РЕДАКТИРОВАТЬ: Я ожидаю, что я могу выполнить порядка 10 ^ 5 поисков и 10 ^ 3 вставок, и эти операции, безусловно, не являются узким местом моего процесса.

Ответы [ 2 ]

4 голосов
/ 04 апреля 2011

Если числа не образуют диапазон 0 ... x (в этом случае вы могли бы просто использовать List<T> или даже просто массив), я все равно пошел бы на подход Dictionary<int, Whatever>. Это просто, работает и почти наверняка будет работать достаточно быстро для вас.

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

РЕДАКТИРОВАТЬ: Как говорит Тимви, здесь действительно можно сделать потенциальную экономию , если это действительно критично для производительности . Без общего типа ключа и вызовов виртуальных методов для извлечения хеш-кодов и сравнения значений вы, несомненно, могли бы добиться большего. Но я бы не стал доверять какой-либо сторонней коллекции так сильно, как встроенной, и я , конечно, не доверял бы своим собственным реализациям коллекции для чего-то нетривиального без огромного количества тестирования. ... это должно быть действительно существенное узкое место в приложении в целом, прежде чем я решу отойти от встроенных типов.

2 голосов
/ 04 апреля 2011

Словарь будет просто вызывать GetHashCode для типа, поэтому для Int32 я думаю, это будет довольно быстро. В принципе, я думаю, что он уже достаточно оптимизирован для вас.

Какой тип я использую, зависит от типа ключа к значению, в большинстве случаев я не беспокоюсь о производительности.

...