У меня есть класс, чьи объекты будут храниться в hashmap, hashset.
Мне нужно поддерживать равенство подстановочных символов для полей, поэтому я добавил эту проверку в методе equals
.Теперь, как я могу построить свой метод хэш-кода на основе этого параметра?то есть, если я вычисляю, как показано в коде ниже, я получу другой хеш-код для 2 объектов, которые проходят проверку на равенство моего метода equals.
Например, рассмотрим следующий класс:
public class Person {
private String fname = "";
private String lname = "";
private String profession = "";
// getters & setters
@Override
public boolean equals(Object obj) {
if (fname == null) {
if (other.fname != null)
return false;
} else if (!fname.equals(other.fname) && !other.fname.equals("*") && !fname.equals("*"))
return false;
return true;
// similar for other fields
}
@Override
public int hashCode() {
return Objects.hashCode(this.fname, this.lname , this.profession);
}
}
РЕДАКТИРОВАТЬ:
Как указано в некоторых комментариях, должен быть отдельный методпроверить равенство wildchar.Ограничением этого подхода является то, что я не смогу получить правильные результаты для таких методов, как set.contains
, поскольку они проверяют наличие object.equals
внутри.Так что мой set.contains
вернет false, даже если мои объекты пройдут проверку на равенство моего отдельного метода равенства с подстановочными символами.