У меня есть два объекта с тем же именем, но они содержат разные возрасты (значения). Я попытался добавить эти объекты к карте, чтобы удалить дубликаты, но не удаляется. Это модель кода я тестирование:Удаление повторяющихся объектов, которые содержат разные переменные
two ab = new two("john", "20");
two ac = new two("chan", "30");
two ad = new two("john", "34");
ArrayList<two> ae = new ArrayList<>();
public void adding(){
ae.add(ab);
ae.add(ac);
ae.add(ad);
System.out.println(ae);
}
public void removeDuplicate(){
Set<two> lhs = new HashSet<>();
lhs.addAll(ae);
ae.clear();
ae.addAll(lhs);
System.out.println(ae);
}
public static void main(String args[]){
one five = new one();
five.adding();
five.removeDuplicate();
}
Это класс, который используется для типа объекта:
package teeestserrr;
public class two {
private String name;
private String age;
public two(String name, String age){
this.age = age;
this.name = name;
}
public String getName(){
return name;
}
public String getAge(){
return age;
}
public String toString(){
return name + " " + age;
}
}
Результаты:
[john, chan, john]
[chan, john, john]
Я также попытался сделать toString
возвращает только имя, но карта, используемая для удаления дубликатов, не работает даже в этом случае. Я не понимаю, и я не могу определить основную проблему. Любая помощь приветствуется.
Вы должны переопределить 'equals' и' hashCode' в классе 'two' – Eran
Eran верен. HashSet полагается на эти два метода для его работы (отсюда и название HashSet). Используйте свою любимую поисковую систему, чтобы найти руководство о том, как эти два метода должны быть реализованы. Возможно, даже ваша IDE может сгенерировать их для вас. –