💨
【Java】equalsとhashCodeメソッドをオーバーライドしないといけない例
PersonクラスにequalsとhashCodeメソッドをオーバーライドしていない場合
package practiceAdd.person;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
package practiceAdd.person;
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
HashSet<Person> people = new HashSet<>();
people.add(new Person("鈴木原", 25));
people.add(new Person("鈴木原", 25));
// HashSetは重複したデータは登録されないので1になるはずだが、2と表示される
System.out.println(people.size());
}
}
実行結果
期待した結果にならないですね・・・
PersonクラスにequalsとhashCodeをオーバーライドの記述を行う
package practiceAdd.person;
import java.util.Objects;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
return Objects.hash(age, name);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
return age == other.age && Objects.equals(name, other.name);
}
}
※Eclipseの場合、右クリック→[ソース]→[hashCode()およびequals()の生成]から記述することも出来ます!
実行結果
期待した結果になりました!
Udemyで講座を公開中!
X(旧Twitter)
Zenn 本
Youtube
Discussion