[JAVA] 62. Set

문정준's avatar
Feb 19, 2025
[JAVA] 62. Set
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도 포함되어 있음"); } } }
notion image
  • 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); } }
notion image
 

3. 로또 예제 : Set을 활용하여 튜닝

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); } }
notion image
 
Share article

sxias