Javaでequalsを書き換える方法を理解してあげましょう.なぜhashcodeを書き直すのですか.
あまり話さないで,直接例をあげて,君が知っていることを包む.
まずequals()メソッドのみを書き換えます
テストクラスを見て
ちくじしゅつりょく
矛盾はありますか??equals比較ではオブジェクトは同じですが、HashMapでは異なるオブジェクトで格納されます(hascode値は書き換えられていません.2つのhascode値は、彼から見れば2つのオブジェクトです).果たしてこの2つのオブジェクトは等しいかどうか???hashCode()を書き直さなければならない重要性を説明します.
次にequalsメソッドとhashCodeメソッドを書き換えて比較する
テストクラス
ちくじしゅつりょく
ここを見て、同級生は分かりましたか.まだ分からないので、自分でコードを実現することができます.
まずequals()メソッドのみを書き換えます
public class Student {
private String name;
private int age;
private String QQ;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name) &&
Objects.equals(QQ, student.QQ);
}
テストクラスを見て
public class Test {
public static void main(String[] args) {
Student student = new Student();
Student student2 = new Student();
System.out.println(student.equals(student2)); //true
System.out.println(student.hashCode()); //356573597
System.out.println(student2.hashCode()); //1735600054
HashMap map = new HashMap<>();
map.put(student,"123");
map.put(student2,"456");
System.out.println(map.get(student));
System.out.println(map.get(student2));
}
}
ちくじしゅつりょく
true
356573597 student hashcode
1735600054 student 2 hashcode
123
456
矛盾はありますか??equals比較ではオブジェクトは同じですが、HashMapでは異なるオブジェクトで格納されます(hascode値は書き換えられていません.2つのhascode値は、彼から見れば2つのオブジェクトです).果たしてこの2つのオブジェクトは等しいかどうか???hashCode()を書き直さなければならない重要性を説明します.
次にequalsメソッドとhashCodeメソッドを書き換えて比較する
public class Student {
private String name;
private int age;
private String QQ;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name) &&
Objects.equals(QQ, student.QQ);
}
@Override
public int hashCode() {
return Objects.hash(name, age, QQ);
}
}
テストクラス
public class Test {
public static void main(String[] args) {
Student student = new Student();
Student student2 = new Student();
System.out.println(student.equals(student2)); //true
System.out.println(student.hashCode()); // 29791
System.out.println(student2.hashCode()); // 29791
HashMap map = new HashMap<>();
map.put(student,"123");
map.put(student2,"456");
System.out.println(map.get(student)); //456
System.out.println(map.get(student2)); //456
}
}
ちくじしゅつりょく
true
29791 //
29791
456 // key ,
456
ここを見て、同級生は分かりましたか.まだ分からないので、自分でコードを実現することができます.