2016-09-21 2 views
-1

Я использую класс i, сделанный с именем Key. Он имеет 2 поля:hashcode для объединения типов в Java

  1. адрес (тип MyAddress), которые имеют GUID (тип длинный)
  2. идентификатор (тип длинный)

Этот класс может иметь в любой данный момент одной из следующее:

  • адрес не является недействительным и идентификатор == - 1
  • адрес; является недействительным и идентификатор> 0

Будет ли правильным сделать следующее:

int hashcode(){ 
    if (address==null) return Long.hashCode(id) 
    else return Long.hashcode(address.guid) 
} 

Есть ли какие-либо проблемы, которые могут возникнуть из этого? Я в основном хочу убедиться, что это правильный способ сделать hashcode в этом объединенном классе, когда только одно из полей имеет значение в любой момент времени.

+0

Если классные занятия неизменны, то это прекрасно. –

+0

Что такое функция 'equals'? –

+0

Я верю, что equals будет состоять в том, что если адреса имеют нулевое значение, то сравнивайте их с id и в противном случае сравнивайте с указателем адресов. – slashms

ответ

0

Требование хэш-кода состоит в том, что два одинаковых объекта имеют одинаковый хэш-код. Похоже, ваш хеш-код соответствует этому, и, таким образом, он абсолютно прав.

Тем не менее, это лучшая практика, чтобы объединить все поля, что ваш метод equals является тестирование, а также для разработки хэш-код таким образом, что, если этот объект можно использовать в HashSet, объекты распределены достаточно равномерно на протяжении. This answer будет наглядным примером того, как это сделать.

Смежные вопросы