У меня есть несколько вопросов/сомнения для заполнения значения в HashMapКак мы можем получить неизменный объект, если класс не выполнил клонируемые
Я хочу HashMap принять «Студент», как ключ и «Деталь» в качестве значения. Поскольку ключ к HashMap должны быть неизменны у меня есть некоторые сомнения, как это может быть, рассматриваемые если
- класс Student не клонируемыми
класс Student имеет отношение к которому в свою очередь, имеют ссылки на «Лаборатория»
public class Student { private String id; private String name; private Department dept; public Student(String id, String name, Department dept) { this.id=id; this.name=name; this.dept=dept; } public Department getDepartment() { return this.dept; } } public class Department { private String deptId; private Lab lab; public Department(String deptId, Lab lab) { this.deptId=deptId; this.lab=lab; } public void setLab(Lab lab) { this.lab=lab; } } public class Lab { private String labId; private String labName; public Lab(String labId, String labName) { this.labId=labId; this.labName=labName; } } public class StudentDetails { private String fatherName; private String address public StudentDetails(String fatherName, String address) { this.fatherName=fatherName; this.address=address; } } public class StudentMaintainer { public static void main(String[] args) { StudentDetails stDetails= new StudentDetails("John","Mumbai"); Lab lab= new Lab("100","CS"); Department dept= new Department("900", lab); Student st = new Student("3000",dept); Map<Student,StudentDetails> studentMaintainer= new ArrayList<>(); studentMaintainer.put(st,stDetails); } }
Теперь Даже если студент является клонируемым, я могу получить ссылку отдела и вызвать setLab(), который изменяет StudentObject. (Я не прав?)
Теперь, если отдел и лаборатория из сторонних банках, как я могу использовать объект-ученик в моей карте, если hashCode для студентов (primeNumber + Student.id + Department.id + Lab.id). hashcode() [просто какой-то странный случай];
@ksv Я нарисовал код примера в вашем вопросе для ясности, но здесь вы должны отметить хорошую коррекцию. – Grundlefleck