충분히 쌓여가는
HashSet 2 본문
객체를 저장하기 전에 기존에 같은 객체가 있는지 확인(순서를 유지하지 않고, 중복을 허용하지 않기 때문)
boolean add(Object o)는 저장할 객체의 equals()와 hashCode()를 호출(equals()와 hashCode()가 오버라이딩 되어 있어야한다)
class Person {
String name;
int age;
Person(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + ":" + age;
}
}
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 (name+age).hashCode();
}
코드
import java.util.*;
public class HashSetTest3 {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("abc");
set.add("abc"); // 중복이기 때문에 저장안됨
set.add(new PersonHash("David",10));
set.add(new PersonHash("David",10));
System.out.println(set);
}
}
// equals()와 hashCode()를 오버라이딩해야 HashSet이 바르게 동작
class PersonHash {
String name;
int age;
PersonHash(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name +":"+ age;
}
}
[David:10, abc, David:10]
hashCode와 equals를 오버라이딩 했기 때문에 set.add(new PersonHash("David,10))이 중복으로 되었다
import java.util.*;
public class HashSetTest3 {
public static void main(String[] args) {
HashSet set = new HashSet();
set.add("abc");
set.add("abc"); // 중복이기 때문에 저장안됨
set.add(new PersonHash("David",10));
set.add(new PersonHash("David",10));
System.out.println(set);
}
}
// equals()와 hashCode()를 오버라이딩해야 HashSet이 바르게 동작
class PersonHash {
String name;
int age;
@Override
public int hashCode() {
// int hash(Object... values); // 가변인자
return Objects.hash(name,age);
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof PersonHash)) return false;
PersonHash p = (PersonHash) obj;
// 나자신(this)의 이름과 나이를 p와 비교
return this.name.equals(p.name) && this.age==p.age;
}
PersonHash(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name +":"+ age;
}
}
[David:10, abc]
'Java > JAVA2' 카테고리의 다른 글
TreeSet의 주요 생성자와 메서드 (0) | 2023.07.23 |
---|---|
TreeSet (0) | 2023.07.19 |
HashSet 1 (0) | 2023.07.16 |
Arrays (0) | 2023.07.14 |
Iterator, ListIterator, Enumeration | Map과 Iterator (0) | 2023.07.13 |