IT 면접 족보38

권단비·2023년 2월 21일
0

IT

목록 보기
80/139

1.

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);
	}
}

2. Set 을 이용하여, 로또 번호를 출력 하시오.

▼정답

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() + " ");
		}
	}
}

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

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 + " ");
	}
}

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

▼정답

★set 호출 원리★
①add를 호출하는 순간, Object함수 안에 있는 hashCode함수를 호출하여 군집을 만든다. 
②equals 함수를 사용하여 군집 내에 같은 것이 있는가 체크한다.

hash알고리즘 : num % 10 ⇒ 0, 1, 2 집합 생성
hashCode : 0, 1, 2를 hashCode라고 한다.
*hashCode가 속도가 제일 빠르다.

num % 3; // 3개의 군집을 만들겠다는 의미. (0,1,2)
*군집↓ : 메모리↓, 작업시간↑
*군집↑ : 메모리↑, 작업시간↓

0개의 댓글