@WTFAYD

Как связаны hashcode() и compareTo()?

class TwoTuple28<A,B> implements Comparable {
	// ...
	public int hashCode() {
		int result = 17;
		result = result * 37 + first.hashCode();
		result = result * 37 + second.hashCode();
		return result;
	}
	public int compareTo(Object o) {
		if(!(o instanceof TwoTuple28)) throw new ClassCastException();
		TwoTuple28 t = (TwoTuple28)o;
		return (this.hashCode() - t.hashCode() < 0) ? -1 : 
		((this.hashCode() - t.hashCode() > 0 ? 1 : 0));
}


Подскажите пожалуйста, в чем смысл использовать hashCode() в compareTo()? В compareTo() мы же сравниваем содержимое объекта, hashCode() конечно преобразует информацию объекта в хэш-код, но разве есть какое то точное соотношение между разными hashCode(), что бы их можно было использовать в compareTo()?
  • Вопрос задан
  • 196 просмотров
Пригласить эксперта
Ответы на вопрос 2
zolt85
@zolt85
Программист
В случае compareTo() мы не просто сравниваем два объекта, мы еще даем им "вес" (больше, меньше), по-этому, я считаю, не совсем корректно использовать результаты hashCode в вычислении данного "веса". Хотя если автора все устраивает, и, допустим, коллекции таких объектов сортируются именно так, как он задумал, то не вижу проблем с этим. Главное тестами все покрыть.
Ответ написан
@Tiberal
нет. из-за коллизии может быть неверное сравнение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы