イコールとハッシュコードに関して疑問があります。私が以前に理解したことは、そのクラスがコレクションクラスまたはMapクラスに追加されることになっている場合、オブジェクトクラスのhashcode()およびequals()メソッドをオーバーライドする必要があるということです。以下の例をご覧ください。ハッシュコードとequalsメソッドをオーバーライドしませんでした。それでも私は私が望むものを望む結果を得る。私が理解したことの1つは、2つのオブジェクトを比較する場合は、equalsメソッドをオーバーライドする必要があるということです。ただし、この例では、2つのオブジェクトを比較しているのではなく、ハッシュコードと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 ;
}
}