이채림 2024. 11. 7. 19:15

Java의 HashSet은 중복 없는 데이터를 저장할 때 유용한 자료구조이다.

 

HashSet이란?

HashSet은 집합(Set) 자료구조의 한 종류로, Java Collection Framework에 속한다.

  • 데이터 중복 허용 안함
  • 저장 순서 유지 안됨
  • 빠른 조회, 추가, 삭제 |  평균적으로 O(1)

 

사용법

  • add() : 요소 추가
  • remove() : 요소 제거
  • contains() : 요소 존재 확인
  • isEmpty() : 비어있는지 확인
  • size() : 현재 요소 개수 반환
  • clear() : 모든 요소 제거

 


 

HashSet과 HashMap의 차이점

1. 데이터 저장 방식

  • HashSet : 단일 값 저장
  • HashMap : 키-값 쌍 저장 (키는 중복 허용 X, 값은 중복 가능)

2. 사용 목적

  • HashSet : 중복 없는 데이터의 모음이 필요할 때 사용
  • HashMap : 키와 값의 매핑이 필요할 때 사용

 

공통점 : 내부적으로 해싱을 사용하여 데이터를 빠르게 관리한다.

 

 

 

 

 


https://www.acmicpc.net/problem/11723

 

import java.io.*;
import java.util.HashSet;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int M = Integer.parseInt(br.readLine());

        HashSet<Integer> set = new HashSet<>();
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < M; i++) {
            String str = br.readLine();
            String[] parts = str.split(" ");
            String command = parts[0];

            if (command.equals("add")) {
                set.add(Integer.parseInt(parts[1]));
            } else if (command.equals("remove")) {
                set.remove(Integer.parseInt(parts[1]));
            } else if (command.equals("check")) {
                if (set.contains(Integer.parseInt(parts[1]))) {
                    sb.append("1\n");
                } else {
                    sb.append("0\n");
                }
            } else if (command.equals("toggle")) {
                int num = Integer.parseInt(parts[1]);
                if (set.contains(num)) {
                    set.remove(num);
                } else {
                    set.add(num);
                }
            } else if (command.equals("all")) {
                set.clear();
                for (int j = 1; j <= 20; j++) {
                    set.add(j);
                }
            } else if (command.equals("empty")) {
                set.clear();
            }
        }

        System.out.print(sb);
    }
}