Допустим, у меня есть следующий классКаков правильный способ переопределения равных и hashcode, где любая из двух переменных может быть одинаковой?
public class DualKey {
int key1;
int key2;
// getters, setters and constructors go here
public void equals(Object obj) {
if (obj == null || ! obj instanceOf DualKey)
return false;
return this.key1 == obj.key1 || this.key1 == obj.key2 || this.key2 == obj.key1 || this.key2 == obj.key2;
}
}
Можно ли переопределить хэш-код таким образом, что сохраняется контракт равно и хэш-код?
PS: Я понимаю, что было бы лучше определить компаратор вместо этого, но я работаю с искре, где единственный способ определить равенство - это переопределить метод equals.
Нет, с вашей фактической настройкой это невозможно (если только вы не вернете '0', который сохранит контракт,« если он равен, то и hashcode должен быть равен », но у вас будет тонна столкновений) – tkausl