У меня есть этот класс:
private static class ClassA{
int id;
String name;
public ClassA(int id, String name){
this.id= id;
this.name = name;
}
@Override
public boolean equals(Object o) {
return ((ClassA)o).name.equals(this.name);
}
}
Почему это основное печатает 2 элемента, если я перезаписываю метод, равный в ClassA, чтобы сравнить только имя?
public static void main(String[] args){
ClassA myObject = new ClassA(1, "testing 1 2 3");
ClassA myObject2 = new ClassA(2, "testing 1 2 3");
Set<ClassA> set = new HashSet<ClassA>();
set.add(myObject);
set.add(myObject2);
System.out.println(set.size()); //will print 2, but I want to be 1!
}
Если я загляну в документацию Set Java :
Коллекция, которая не содержит повторяющихся элементов. Более формально, множества не содержат пары элементов e1 и e2, таких как e1.equals (e2), и не более одного нулевого элемента. Как следует из его названия, этот интерфейс моделирует абстракцию математического набора.
Так что, очевидно, мне нужно только переопределить equals, однако я слышал, что мне также нужно переопределить хеш-код, но почему?