JAVA set, hash (230703)

이원건·2023년 7월 3일
0

JAVA

목록 보기
28/33
post-thumbnail

1. hash 의 특징은?

  • Hash란 일종의 집합 개념으로 적절한 알고리즘을 통해 데이터들을 나눈다.
  • hash algorithm이라 하면 임의의 길이의 데이터를 고정 길이로 중복이 되지 않도록 변환하는 function이다.

2. 로또 프로그램을 작성하시오.(Set 으로)

  • 코드
import java.util.HashSet;
import java.util.Set;

public class SetLottoExample {
	public static void main(String[] args) {
		Set<Integer> lotto = new HashSet<>();
		while(true) {
			lotto.add((int)(Math.random()*45+1));
			if(lotto.size()>=6) break;
		}
		System.out.println(lotto);
	}
}
  • 실행 결과
1회 결과
[33, 37, 5, 6, 23, 43]
2회 결과
[32, 18, 35, 36, 41, 31]
3회 결과
[1, 19, 35, 22, 25, 14]
4회 결과
[2, 20, 21, 5, 41, 11]
5회 결과
[33, 17, 21, 8, 10, 28]
6회 결과
[16, 33, 39, 40, 9, 31]

3. Set에 대하여 설명하시오.

  • set
    • 순서가 없음
    • 중복 불가
    • Collection 부모가 있어서 기본적으로 List와 method를 공유한다
    • 중복을 넣을 때는 찾아서 없애고 들어간다.

4. 출력이 아래와 같이 나오도록 하시오(필수) ⭐️

  • 문제
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
  • 코드
class Num{
	private int num;

	public Num(int num) {
		this.num = num;
	}

	@Override
	public String toString() {
		return String.valueOf(num);
	}

	@Override
	public int hashCode() {
		return num;
	}

	@Override
	public boolean equals(Object obj) {
		if(num == ((Num)obj).num)
			return true;
		return false;
	}

}
import java.util.HashSet;

public class VelogSetExample {
	public static void main(String[] args) {
	    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
9955	7799

5. Set 호출되는 원리와 순서를 설명하시오.

  • 문제
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)]
  • 설명
  • add할 때 객체를 생성하는데 객체 생성 후 생성된 객체의 클래스의 오버라이드된 hashCode() 메소드를 먼저 불러와서 같은 것이 있는지 비교한다. 같은 것이 없으면 객체를 Set에 추가를 한다. 같은 것이 있다면 마찬가지로 오버라이드된 equals() 메소드에서 값을 확인한다. 그렇게 확인을 해서 equals() 메소드에서 true를 리턴하면 원래 있던 객체를 삭제하고 등록. false를 리턴하면 그냥 새로 생성한다.
  • hashCode()와 equals() 메소드를 통해 중복되지 않도록 생성해 저장된 데이터 수는 2개고, 순서는 상관없기 때문에 또 오버라이딩 된 toString()메소드의 리턴값을 출력하며 LEE(10세), PARK(35세)가 출력되는 것이다.

0개의 댓글