SharpDevelop - проблема управления ресурсами и доступа к ним

Я думаю, что ты прав. Хотя хэш удваивает ints, двойной может испортить хэш. Вот почему, как говорит Джош Блох в «Эффективной Java», когда вы используете double в качестве входа в хеш-функцию, вы должны использовать doubleToLongBits () . Аналогичным образом, используйте floatToIntBits для поплавков.

В частности, чтобы использовать двойной как ваш хэш, следуя рецепту Джоша Блоха, вы бы сделали:

public int hashCode() {
  int result = 17;
  long temp = Double.doubleToLongBits(the_double_field);
  result = 37 * result + ((int) (temp ^ (temp >>> 32)));
  return result;
}

Это из пункта 8 Эффективная Java, «Всегда переопределять hashCode при переопределении равных». Это можно найти в этой pdf главы из книги .

Надеюсь, что это поможет.

0
задан Andrej Poženel 19 March 2019 в 13:58
поделиться