I have some doubts regarding equals and hashcode. What I have understood previously is, we need to override the hashcode() and equals() method in the object class if that class is supposed to add to the collection class or Map class. Please see the below example. I did not override the hashcode and equals method. Still I get the desired result what I want. One thing i understood that, If I want to compare two object we need to override the equals method. But in this example I am not comparing two objects, rather I am adding objects to collection or Map without overriding the hashcode and equals. Could anyone explain why do we need to override the hashcode and when?
package equalshashcode; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class EqualsAndHashCode { public static void main(String[] args) { Student student1 = new Student("A"); Student student2 = new Student("B"); List<Student> studentList = new ArrayList<Student>(); Map<Integer,Student> studentMap = new HashMap<Integer,Student>(); studentMap.put(1, student1); studentMap.put(2, student2); studentList.add(student1); studentList.add(student2); System.out.println("Student HashMap:: "+studentMap.get(1)); System.out.println("Before removing::"+studentList); System.out.println(studentList.remove(student1));//true success System.out.println("After removing::"+studentList); } } class Student{ String name; public Student(String pName){ this.name = pName ; } public String getName(){ return this.name ; } }
System.out.println(studentList.remove(new Student("A"))). This will not removestudent1from the list despite having the same name (which may or may not be the desired effect). If you'd want to construct multiple instances of the same student and use a collection with any of these instances, you'd have to overrideequals()andhashCode()