HashSet<Person> hSet = new HashSet<Person>();
hSet.add(new Person("LEE", 10));
hSet.add(new Person("LEE", 10));
hSet.add(new Person("PARK", 35));
hSet.add(new Person("PARK", 35));
System.onut.println("저장된 데이터 수: " + hSet.size());
System.out.println(hSet);
/*
============
저장된 데이터 수: 2
[LEE(10세), PARK(35세)]
▼정답
package CollectionF;
import java.util.HashSet;
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
return age % 3;
}
@Override
public boolean equals(Object obj) {
if (this.name.equals(((Person) obj).name) && (this.age == (((Person) obj).age))) {
return true;
} else {
return false;
}
}
@Override
public String toString() {
return this.name + "(" + this.age + "세)";
}
}
public class Test7 {
public static void main(String[] args) {
HashSet<Person> hSet = new HashSet<Person>();
hSet.add(new Person("LEE", 10));
hSet.add(new Person("LEE", 10));
hSet.add(new Person("PARK", 35));
hSet.add(new Person("PARK", 35));
System.out.println("저장된 데이터 수: " + hSet.size());
System.out.println(hSet);
}
}
▼정답
package CollectionF;
import java.util.*;
public class SetLotto {
public static void main(String[] args) {
HashSet<Integer> lotto = new HashSet<>();
while (lotto.size() < 6) {
lotto.add((int) (Math.random() * 45) + 1);
}
System.out.print("로또 번호: ");
for (Iterator<Integer> i = lotto.iterator(); i.hasNext();) {
System.out.print(i.next() + " ");
}
}
}
HashSet<Num> set = new HashSet<>();
set.add(new Num(7799));
set.add(new Num(9955));
set.add(new Num(7799));
System.out.println("인스턴스 수: " + set.size());
for(Num n : set)
System.out.print(n.toString() + '\t');
System.out.println();
/*
====출력
인스턴스 수: 2
7799 9955
*/
▼정답
package CollectionF;
import java.util.*;
class Num1 {
private int num;
public Num1(int num) {
this.num = num;
}
public int getNum() {
return num;
}
@Override
public String toString() {
return String.valueOf(num);
}
@Override
public int hashCode() {
return num % 3;
}
@Override
public boolean equals(Object obj) {
if (num == ((Num1) obj).getNum())
return true;
else
return false;
}
}
public class Test8 {
public static void main(String[] args) {
HashSet<Num1> set = new HashSet<>();
List<Integer> set2 = new ArrayList<>();
set.add(new Num1(7799));
set.add(new Num1(9955));
set.add(new Num1(7799));
for (Iterator<Num1> i = set.iterator(); i.hasNext();)
set2.add(i.next().getNum());
Collections.sort(set2);
System.out.println("인스턴스 수: " + set.size());
for (int n : set2)
System.out.print(n + " ");
}
}
▼정답
★set 호출 원리★
①add를 호출하는 순간, Object함수 안에 있는 hashCode함수를 호출하여 군집을 만든다.
②equals 함수를 사용하여 군집 내에 같은 것이 있는가 체크한다.
hash알고리즘 : num % 10 ⇒ 0, 1, 2 집합 생성
hashCode : 0, 1, 2를 hashCode라고 한다.
*hashCode가 속도가 제일 빠르다.
num % 3; // 3개의 군집을 만들겠다는 의미. (0,1,2)
*군집↓ : 메모리↓, 작업시간↑
*군집↑ : 메모리↑, 작업시간↓