새발블로그

HashSet 본문

Problem Solving/개념

HashSet

EUG 2025. 7. 4. 17:28

Set (집합)

  • 중복을 허용하지 않음
  • 요소 간 순서가 없음
  • 요소의 추가, 삭제가 가능한 mutable 컬렉션

HashSet 사용법

자바에서 HashSet은 Set 인터페이스를 구현한 클래스

내부적으로 Hash Table을 사용하여 데이터를 저장

선언

Set<String> hashset = new HashSet<>();

초기화와 값 추가

Set<String> hashset = new HashSet<>() {{
    add("사과");
    add("배");
}};

주요 연산

hashset.add("사과");         // 요소 추가
hashset.remove("배");     // 요소 제거
hashset.contains("포도");   // 존재 여부 확인 → true

Set은 같은 값을 여러 번 추가해도 한 번만 저장된다.
삽입 순서나 정렬을 보장하지 않는다.

커스텀 클래스와 HashSet

Set에도 여러 값의 조합을 저장하고 싶을 때, 클래스를 정의해 사용할 수 있다.
이 경우 equals()와 hashCode()를 반드시 오버라이드해야 한다.

예시 클래스: 좌표 저장용

class Point {
    int x, y;

    Point(int x, int y) {
        this.x = x; this.y = y;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Point) {
            Point other = (Point)obj;
            return this.x == other.x && this.y == other.y;
        }
        return false;
    }

    @Override
    public int hashCode() {
        return Objects.hash(x, y);
    }
}

사용 예시

Set<Point> points = new HashSet<>();

points.add(new Point(1, 2));
points.add(new Point(3, 4));
points.add(new Point(1, 2));  // 중복이므로 무시됨

System.out.println(points.size()); // 2

 

HashSet vs List 비교

 

연산 HashSet List
중복 허용 불가능 가능
검색 속도 O(1) (평균) O(n)
삽입 순서 보장 안 됨 보장됨
정렬 직접 불가능 가능 (sort())

정렬이 필요한 경우?

  • HashSet은 정렬 기능을 지원하지 않는다.
  • 정렬이 필요하다면 TreeSet 또는 정렬된 List로 변환 후 처리해야 한다.
Set<String> set = new HashSet<>();
set.add("banana");
set.add("apple");
set.add("cherry");

List<String> sorted = new ArrayList<>(set);
Collections.sort(sorted);  // 알파벳 순 정렬

 

 

'Problem Solving > 개념' 카테고리의 다른 글

레퍼런스 타입 매개변수  (0) 2025.07.04
변수 유효범위  (0) 2025.07.04
해시테이블  (0) 2025.07.04
스택  (0) 2025.07.04
  (0) 2025.07.04