11-37~38 HashSet(2)
(同じオブジェクトがない場合は保存します.ある場合は保存しません.)
(オブジェクトクラスのメソッドequals()とhashCode()は上書きする必要があります)
public boolean equals(Object obj){
if(!(obj instanceof Person)) return false;
Person tmp = (Person)obj;
return name.equals(tmp.name) && age == tmp.age;
}
public int hashCode(){
return Objects.hash(name, age);
}
例3class Ex11_11 {
public static void main(String[] args){
HashSet set = new HashSet();
set.add("abc");
set.add("abc"); // 중복이라 저장안 됨.
set.add(new Person("David", 10));
set.add(new Person("David", 10));
System.out.println(set);
}
}
// equals()와 hashCode()를 오버라이딩해야 HashSet이 바르게 동작.
// eclipse : source menu -> Generate hashCode() and equals()...
class Person{
String name;
int age;
@Override
public int hashCode() {
// int hash(Object... values); 가변인자
return Objects.hash(name, age);
}
@Override
public boolean equals(Object obj) {
// obj 객체에는 name 멤버가 없으므로 형변환 해야 함.
if(!(obj instanceof Person)) return false;
Person p = (Person)obj;
// 나 자신(this)의 이름과 나이를 p와 비교
return this.name.equals(p.name) && this.age == p.age;
}
Person(String name, int age){
this.name = name;
this.age = age;
}
public String toString() {
return name +":"+ age;
}
}
Reference
この問題について(11-37~38 HashSet(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@oyeon/11-3738-HashSet2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol