새발블로그
HashSet 본문
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 |