Ответ 1
Я не думаю, что значения хэша должны быть отрицательными.
Почему бы и нет? Он полностью действителен, чтобы иметь отрицательные хэш-коды. Большинство способов придумать хеш-код, естественно, приводят к отрицательным значениям, и все, что с ними связано, должно учитывать это. Тем не менее, я бы рассмотрел другой подход к составлению ваших хэш-кодов, например.
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
.