У меня есть очень простой вопрос, когда java.util.Установить проверки, являются ли добавляемые объекты дубликатами?
Поскольку у меня есть класс модели, как показано ниже, который переопределяет методы equals и hashcode.
public class SampleModel implements Comparable {
private String name;
public SampleModel(String name) {
this.name = name;
}
// Setter and Getter omitted
@Override
public boolean equals(Object arg0) {
boolean eq = false;
if (arg0 instanceof SampleModel
&& this.name.equalsIgnoreCase(((SampleModel) arg0).name)) {
eq = true;
}
return eq;
}
@Override
public int compareTo(Object arg0) {
return this.name.compareTo(((SampleModel) arg0).name);
}
@Override
public int hashCode() {
return this.name.length();
}
}
Вот как я использую объекты модели в HashSet.
SampleModel s1 = new SampleModel("Satya");
SampleModel s2 = new SampleModel("Katti");
Set<SampleModel> samSet = new HashSet<SampleModel>();
System.out.println(samSet.add(s1));
System.out.println(samSet.add(s2));
s2.setName("Satya");
System.out.println(s2.getName());
System.out.println(s1 + ", " + s2);
В соответствии с условием равенства объекты одинаковы и равны, но HashSet будет содержать дубликаты.
Имеются ли какие-либо нарушения в отношении равенства или хэш-кода? Если этот код в порядке, то есть ли способы предотвратить добавление дубликатов?
Я предполагаю, какие поля, используемые при определении равенства и хэш-кода, должны быть сделаны неизменными?