Set (세트)
순서 상관없이 데이터만 저장할 수 있는 자료구조
1. Set
- 순서에 상관없이 데이터만 저장할 수 있는 자료구조
- 동일한 데이터를 중복해서 가질 수 없음
- HashSet, TreeSet, LinkedHashSet의 3가지 종류
package ex18;
import java.util.HashSet;
public class SetTest {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("Milk");
set.add("Bread");
set.add("Butter");
set.add("Cheese");
set.add("Ham");
// Ham을 중복 삽입 : 포함되지 않음
set.add("Ham");
// Set의 특성 : Ham이 1개만 포함
System.out.println(set);
if (set.contains("Ham")) {
System.out.println("Ham도 포함되어 있음");
}
}
}

- LinkedHashset을 사용할 시 입력한 순서대로 set 출력
- TreeSet을 사용할 시 알파벳 순서대로 정렬되어 set 출력
2. 합집합, 교집합
- addAll() : 두 set의 합집합을 계산
- s1.addAll(s2) : s2에서 s1에 없는 원소만을 s1에 추가
- retainAll() : 두 set의 교집합을 계산
- s1.retainAll(s2) : s2에서 s1에 있는 원소만을 골라서 s1에 저장
package ex18;
import java.util.HashSet;
import java.util.Set;
public class FindDuplication {
public static void main(String[] args) {
Set<String> set = new HashSet<String>();
String[] sample = {"사과", "사과", "바나나", "토마토"};
for (String s : sample) {
// 포함될 수 없다면 중복된 단어로 출력
if (!set.add(s)) System.out.println("중복된 단어 : " + s);
}
// 집합에 저장된 요소 출력
System.out.println(set.size() + " 중복되지 않은 단어 : " + set);
}
}

3. 로또 예제 : Set을 활용하여 튜닝
- 로또 예제 : 8. 최종 테스트 - 로또
package ex18;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;
public class Lotto02 {
public static void main(String[] args) {
// 1 ~ 45까지의 중복되지 않는 6개의 수를 추출하시오.
// 배열 대신 TreeSet 사용 : 중복 방지, 자동 정렬
Set<Integer> set = new TreeSet<Integer>();
Random rand = new Random();
// 로또 번호 추첨 : 중복은 자동 방지되며, 6개의 숫자가 뽑히면 자동 종료
while (true) {
if (set.size() == 6) break;
set.add(rand.nextInt(45) + 1);
}
// 결과 출력
System.out.print("당첨 번호 : " + set);
}
}

Share article