Лучшая реализация? Это - трудный вопрос, потому что он зависит от шаблона использования.
А почти для всех случаев разумная хорошая реализация была предложена в [1 123] Josh Bloch Эффективный Java в Объекте 8 (второй выпуск). Лучшая вещь состоит в том, чтобы искать его там, потому что автор объясняет там, почему подход хорош.
Создает int result
и присваивается ненулевой значение.
Для [1 125] каждое поле f
, протестированное в equals()
метод, вычислите хэш-код c
:
boolean
: вычислите (f ? 0 : 1)
; byte
, char
, short
или int
: вычислите (int)f
; long
: вычислите (int)(f ^ (f >>> 32))
; float
: вычислите Float.floatToIntBits(f)
; double
: вычислите Double.doubleToLongBits(f)
и обработайте возвращаемое значение как каждое длинное значение; hashCode()
метод или 0 если f == null
; Объединение значение хэш-функции c
с [1 121]:
result = 37 * result + c
Возврат result
Это должно привести к надлежащему распределению значений хэш-функции для большинства ситуаций с использованием.
Я считаю, что вы хотите вместо этого использовать удаленный адрес :
csocket.getRemoteSocketAddress().toString();
Думаю, вы ищете метод getInetAddress объекта Socket .
Вместо этого используйте getRemoteSocketAddress ()
.