Скажем, у меня есть класс с именем города, в котором хранятся некоторые данные о городе:Java: Эффективная структура данных для хранения объекта без «логического» дублирует
public class City {
String [] states;
String name;
double lat, lng;
//Constructors, getters/setters, etc
}
Я хочу, чтобы сохранить список городов без дубликаты. Теперь, как правило, было бы легко (использовать HashSet), но я буду сравнивать два объекта, которые являются технически отличными (разные адреса памяти), но те же значения String и double. Я хочу, чтобы мой HashSet рассматривал объекты с одинаковыми внутренними значениями как «эквивалентные».
Я не могу понять, как это сделать. Я переопределяю метод hashCode()? Или, возможно, я переопределяю метод equals()?
Будет что-то вроде следующей работы?
public int hashCode() {
return (double) name.hashCode() + lat * 100 + lng;
}
Вы переопределяете оба символа hashCode и равны, если хотите использовать HashSet – Eran
Вы переопределяете оба метода. –
Сделайте свои поля окончательными (или, по крайней мере, логически окончательными). Если они изменяемы, вы можете получить дубликаты в 'Set', потому что они были« уникальными »во время вставки, но не впоследствии. –