I would like to understand the below scenario of equals() and hashcode() and here hashcode always returns 1.
- Case-1: if I don't override
equalsand hashcode then I get size=4 - Case-2: If I don't override
equals, only overridehashcodealways returning 1, then size=4 - Case-3: If I don't override
hashcode, only overrideequalsthen size=4 - Case-4: If I override
equalsandhashcodeboth ,hashcodealways returns 1, then size=3 - Case-5: If I override
equalsandhashcodeboth,hashcodewill be system generated, then size=3
Can somebody explain how its internally and case of each scenario?
Code
import java.util.HashMap; import java.util.Map; public class Employee { private String name; private int age; public Employee() { } public Employee(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Employee [name=" + name + ", age=" + age + "]"; } @Override public int hashCode() { // final int prime = 31; // int result = 1; // result = prime * result + age; // result = prime * result + ((name == null) ? 0 : name.hashCode()); return 1; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Employee other = (Employee) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } } class Main { public static void main(String[] args) { Employee prateek = new Employee("Prateek", 32); Employee prateek1 = new Employee("Prateek", 32); Employee savani = new Employee("Savani", 40); Employee karan = new Employee("Karan", 18); Map<Employee, String> map = new HashMap<>(); map.put(prateek, "Prateek"); map.put(savani, "Savani"); map.put(prateek1, "Prateek"); map.put(karan, "Karan"); System.out.println("Size = "+map.size()); System.out.println(map); } }
return 1;? hashcode and equals are unrelated, except that if equals is true, hashcode should also be equal.