У меня есть 3 класса
Класс сотрудника похож на
class Employee {
int id;
String name;
long salary;
List<Address> address;
//getter setter, equals and hashcode and parameterized constructor}
И мой класс адресов равен
public class Address {
int housenum;
String streetname;
int pincode;
//getter setter and parameterized constructor
}
, а класс Мой тест похож на
Address address1 = new Address(10, "str 1", 400043);
Address address2 = new Address(10, "str 1", 400043);
List<Address> addressLst1= new ArrayList<>();
List<Address> addressLst2= new ArrayList<>();
addressLst1.add(address1);
addressLst1.add(address2);
addressLst2.add(address1);
addressLst2.add(address2);
Employee employee1 = new Employee(1, "EMP1", 1000, addressLst1);
Employee employee2 = new Employee(1, "EMP1", 1000, addressLst2);
Set<Employee> set = new HashSet<>();
set.add(employee1);
set.add(employee2);
System.out.println(":::::::::::::::addressLst1:::::::::" + addressLst1.hashCode());
System.out.println(":::::::::::::::addressLst2:::::::::" + addressLst2.hashCode());
System.out.println(":::::::::::::::address1:::::::::" + address1.hashCode());
System.out.println(":::::::::::::::address2:::::::::" + address2.hashCode());
System.out.println(":::::::::::::::employee1:::::::::" + employee1.hashCode());
System.out.println(":::::::::::::::employee2:::::::::" + employee2.hashCode());
set.forEach(System.out::println);
System.out.println(":::::::::::::::size:::::::::" + set.size());
Я получаю другой хеш-код для объектов адреса, поскольку я не переопределил equals и hashcode. Но почему я получаю один и тот же хэш-код для двух разных списков адресов, т.е. addressLst1 и addressLst2 И почему я получаю размер, равный 1, почему хеш-код объекта-сотрудника одинаков? И как правильно переопределить equals и hashcode для пользовательского объекта, состоящего из списка другого пользовательского объекта?