Требуется объяснение примера хэш-кода в руководстве по эффективной работе с Java

Вот пример кода из статьи 9:

public final class PhoneNumber {
  private final short areaCode;
  private final short prefix;
  private final short lineNumber;

  @Override
  public int hashCode() {
    int result = 17;
    result = 31 * result + areaCode;
    result = 31 * result + prefix;
    result = 31 * result + lineNumber;
    return result;
  }
}

На стр. 48 указано: "значение 31 было выбрано, потому что это нечетное простое число. Если если бы оно было четным и умножение переполнилось, информация была бы потеряна, так как умножение на 2 эквивалентно сдвигу».

Я понимаю, что концепция умножения на 2 эквивалентна сдвигу битов. Я также знаю, что мы все равно получим переполнение (следовательно, потеря информации), когда мы умножаем большое число на большое нечетное простое число. Чего я не понимаю, так это того, почему потеря информации, возникающая в результате умножения на большие нечетные простые числа, предпочтительнее потери информации, возникающей в результате умножения на большие четные числа.

5
задан Kes115 6 June 2012 в 13:41
поделиться