Здравствуйте, Shmj, Вы писали:
S>Что не есть умно, так как массив может быть весьма длинным, а GetHashCode служит как раз для быстрой проверки на то что объекты не идентичны. Главное условие GetHashCode -- у одинаковых объектов оно всегда совпадает, а у разных объектов как правило не совпадает (но допуситмы коллизии, то есть может совпадать и у разных объектов).
В общем, верно. Но цель хэшфункции, как правило, как раз в минимизации коллизий.
S>По этому вычислять GetHashCode для массива путем вовлечения всех элементов -- глупо и бессмысленно. Согласны?
В каком-то частном случае — не возражаю. В общем случае — не согласен. Общеупотребимы те способы вычисления хэша массива, которые при отличии даже в одном элементе, имеют тенденцию вычислять разное значение.
S>Т.к. GetHashCode возвращает int, то вовлечь достаточно 4 байта. Так же можно вовлечь длину массива (или 1 байт длины). Это будет и быстро и выполнять свои функции, то есть в большенстве случаев сработает. Согласны?
Могу согласиться лишь в том, что правильным подходом при выборе функции хэша в конкретном случае — является бенчмарк. Но т.к. я не видел бенчмарк для большинства случаев, лично мне сложно судить об этом большинстве.
ЗЫ. При увеличиении вероятности коллизии нелинейным образом возрастает необходимость выполнения сравнения, которое обычно дороже чем вычисление хэша.