Я не думаю, что значения хеш-функции должны быть отрицательными.
Почему бы и нет? Вполне допустимо иметь отрицательные хэш-коды. Большинство способов создания хеш-кода, естественно, заканчиваются отрицательными значениями, и все, что с ними связано, должно учитывать это. Тем не менее, я бы рассмотрел другой подход к получению ваших хеш-кодов, например
int hash = 17;
hash = hash * 31 + srcadd.hashCode();
hash = hash * 31 + dstadd.hashCode();
hash = hash * 31 + sourceport; // I'm assuming this is an int...
hash = hash * 31 + destinationport; // ditto
hash = hash * 31 + protocol.hashCode();
return hash;
Непонятно, что это за типы выражений, но я предполагаю, что вы в конечном итоге берете хеш-код строки ... строки, которую вам вообще не нужно создавать. Хотя существуют лучшие подходы для получения хеш-кодов для известных доменов, вышеупомянутый подход хорошо работает в качестве универсальной техники генерации хешей.
Обратите внимание, что это также поможет удобочитаемости вашего кода, если вы будете избегать сокращений и использовать верблюжий корпус, например sourceAddress
вместо srcadd
.