我对equals和hashcode有一些疑问。我之前的理解是,如果该类应该添加到集合类或 Map 类中,我们需要覆盖对象类中的 hashcode() 和 equals() 方法。请看下面的例子。我没有覆盖 hashcode 和 equals 方法。我仍然得到了我想要的结果。我明白一件事,如果我想比较两个对象,我们需要重写 equals 方法。但在这个例子中,我没有比较两个对象,而是将对象添加到集合或映射中,而不覆盖哈希码和等于。谁能解释为什么我们需要覆盖哈希码以及何时?
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 ;
}
}