Каков предпочтительный способ реализации hashCode ()?

Иногда мне нужно реализовать метод hashCode () объекта, объединив hashCodes нескольких его членов-экземпляров. Например, если комбинационный объект obj имеет члены a, b и c, я часто вижу, что ppl реализует его как


int hashCode(){
   return 31 * 31 * a.hashCode() + 31 * b.hashCode() + c.hashCode();
}

Откуда это волшебное число 31? Это длина 4 байта или просто простое число?

Есть ли другой предпочтительный / стандартный способ реализации hashCode ()?

Ответы на вопрос(6)

Ваш ответ на вопрос